DEVELOP

users 테이블 생성

- 테이블 생성 

mysql> create table users(
    -> id INT NOT NULL AUTO_INCREMENT,
    -> authId VARCHAR(50) NOT NULL,    
    -> username VARCHAR(30),        
    -> password VARCHAR(255),          
    -> salt VARCHAR(255),           
    -> displayName VARCHAR(50),
    -> email VARCHAR(50),
    -> PRIMARY KEY(id),
    -> UNIQUE (authid));

- 결과

mysql> DESC users; 
+-------------+--------------+------+-----+---------+----------------+
| Field       | Type         | Null | Key | Default | Extra          |
+-------------+--------------+------+-----+---------+----------------+
| id          | int          | NO   | PRI | NULL    | auto_increment |
| authId      | varchar(50)  | NO   | UNI | NULL    |                |
| username    | varchar(30)  | YES  |     | NULL    |                |
| password    | varchar(255) | YES  |     | NULL    |                |
| salt        | varchar(255) | YES  |     | NULL    |                |
| displayName | varchar(50)  | YES  |     | NULL    |                |
| email       | varchar(50)  | YES  |     | NULL    |                |
+-------------+--------------+------+-----+---------+----------------+
7 rows in set (0.01 sec)

local - 회원가입

app.post('/auth/register', (req, res) => {
  hasher({ password: req.body.password }, (err, pass, salt, hash) => {
    var user = {
      authId: 'local:' + req.body.username,
      username: req.body.username,
      password: hash,
      salt: salt,
      displayName: req.body.displayName
    };
    var sql = 'INSERT INTO users SET ?';
    conn.query(sql, user, (err, results) => {
      if (err) {
        console.log(err);
        res.status(500);
      } else {
        req.logIn(user, (err)=>{
          req.session.save(()=>{
            res.redirect('/welcome');
          });
        });
      }
    });
  });
});

local - 로그인

passport.serializeUser((user, done) => {
  done(null, user.authId); // 식별자
});

passport.deserializeUser((id, done) => {
  var sql = 'select * from users where authId = ?';
  conn.query(sql, [id], (err, results)=>{
    console.log(sql, err, results);
    if(err){
      console.log(err);
      done('There is no user.');
    }else{
      done(null, results[0]);
    }
  });
});

passport.use(new LocalStrategy((username, password, done) => {
  var uname = username;
  var pw = password;
  var sql = 'select * from users where authId =?';
  conn.query(sql, ['local:' + uname], (err, results) => {
    if (err) {
      console.log(err);
      return done('There is no user.');
    }
    var user = results[0];
    return hasher({ password: pw, salt: user.salt }, (err, pass, salt, hash) => {
      if (hash === user.password) {
        done(null, user);
      } else {
        done(null, false);
      }
    });
  })
})
);

app.post('/auth/login', passport.authenticate(
  'local',
  {
    successRedirect: '/welcome',
    failureRedirect: '/auth/login',
    failureFlash: false
  }));

facebook - 로그인

app.get('/auth/facebook', passport.authenticate(
  'facebook',
  {scope : 'email'}
));

app.get('/auth/facebook/callback',
  passport.authenticate(
    'facebook',
    {
      successRedirect: '/welcome',
      failureRedirect: '/auth/login',
      failureFlash: false
    }));

passport.use(new FacebookStrategy({
  clientID: id,
  clientSecret: secret,
  callbackURL: "/auth/facebook/callback",
  profileFields : ['id','emails','gender','link','locale','name',
  'timezone','updated_time','verified','displayName']
},
  (accessToken, refreshToken, profile, done) => {
    console.log(profile);
    var authId = 'facebook:'+profile.id;
    var sql = 'select * from users where authId=?';
    conn.query(sql,[authId],(err, results)=>{
      if(results.length>0){
        done(null,results[0]);
      }else{
        var newuser = {
          'authId' : authId,
          'displayName' : profile.displayName,
          'email' : profile.emails[0].value
        };
        var sql = 'insert into users set ?';
        conn.query(sql, newuser, (err, results)=>{
          if(err){
            console.log(err);
            done('Error!');
          }else{
            done(null,newuser);
          }
        })
      }
    })
  }
));

 

profile

DEVELOP

@JUNGY00N