타사 인증을 mysql 로 구현해보자.
facebook 타사인증을 사용해볼 것이다.
일단 이제 사용자의 정보는 mysql에서 가져오기 때문에 코드에 사용자의 정보를 적어둔 users 배열은 지워버린다.
// mysql 을 사용하면서 users 배열을 필요가 없어졌다.
// var users = [
// {
// authId:'local:egoing',
// username:'egoing',
// password:'mTi+/qIi9s5ZFRPDxJLY8yAhlLnWTgYZNXfXlQ32e1u/hZePhlq41NkRfffEV+T92TGTlfxEitFZ98QhzofzFHLneWMWiEekxHD1qMrTH1CWY01NbngaAfgfveJPRivhLxLD1iJajwGmYAXhr69VrN2CWkVD+aS1wKbZd94bcaE=',
// salt:'O0iC9xqMBUVl3BdO50+JWkpvVcA5g2VNaYTR5Hc45g+/iXy4PzcCI7GJN5h5r3aLxIhgMN8HSh0DhyqwAp8lLw==',
// displayName:'Egoing'
// }
// ];
facebook 타사인증을 위해서, require
해준다.
//facebook 으로 타사인증
var FacebookStrategy = require('passport-facebook').Strategy;
로그인을 할 때, facebook 버튼을 누르면, facebook 으로 들어가는 app.get 라우터와 facebook 에서 정보를 받아오는 app.get . 두 개의 get 라우터를 준비한다.
// 페이스북으로 가능 app.get
app.get(
'/auth/facebook',
passport.authenticate(
'facebook',
{scope:'email'}
)
);
// 페이스북에서 오는 app.get
app.get(
'/auth/facebook/callback',
passport.authenticate(
'facebook',
{
successRedirect: '/welcome',
failureRedirect: '/auth/login'
}
)
);
이제 페이스북 strategy 를 새롭게 저장하는 passport.use 를 작성한다.
// facebook 타사인증
passport.use(new FacebookStrategy({
clientID: '1602353993419626',
clientSecret: '232bc1d3aca2199e6a27eb983e602e0b',
callbackURL: "/auth/facebook/callback",
profileFields:['id', 'email', 'gender', 'link', 'locale', 'name', 'timezone', 'updated_time', 'verified', 'displayName']
},
function(accessToken, refreshToken, profile, done) {
console.log(profile);
var authId = 'facebook:'+profile.id;
//sql 문 작성
var sql = 'SELECT * FROM users WHERE authId=?';
conn.query(sql, [authId],function(err,results){
if(results.length > 0){
//사용자가 존재했을 때
done(null,results[0])
}else{
// 사용자가 없을 때, 새로운 사용자 객체를 만들어서 sql 문을 통해서 mysql 에 저장한다.
var newuser = {
'authId':authId,
'displayName':profile.displayName,
'email':profile.emails[0].value
};
var sql="INSERT INTO users SET ?"
conn.query(sql,[],function(err,results){
if(err){
// err 가 있다면, 해당 코드를 탄다.
console.log(error);
done('Error');
}else{
// 새로운 사용자의 정보를 담고 있는 newuser를 두 번째 변수로 넣어서 보낸다.
done(null,newuser);
}
});
};
});
};
));
이렇게 코드를 작성하면, facebook 을 눌렀을 때, 해당 페이스북에 접속해서 페이스북 계정을 통해서 로그인을 하는 것이 가능해진다.