我在我的應用中使用帶有passportJS的NodeJ,以允許用戶使用Facebook登錄/註冊。它似乎工作正常,不知道如果我完全理解那裏發生了什麼。所以這個想法是,用戶可以嘗試使用Facebook的詳細信息從我的應用中的不同頁面登錄。 Facebook的返回我以後所有的細節我登錄他們或使用何種Facebook的返回註冊新用戶,並做到這一點後,他們重定向到相同的頁面,但被已經登錄的代碼是:帶Facebook策略的PassportJS,我的代碼是否正確?
var passport = require('passport'),
FacebookStrategy = require('passport-facebook').Strategy;
function setupFBStrategy(req, res, next) {
return function(req, res, next) {
var redirectUrl = req.params.currentPage;
console.log('setupFBStrategy')
passport.use(new FacebookStrategy({
clientID: 'abc',
clientSecret: 'def',
// step 2 ################################
callbackURL: "/auth/facebook/callback?currentPage="+redirectUrl,
passReqToCallback: true,
profileFields: ['first_name', 'last_name', 'photos', 'email']
},
function(req, accessToken, refreshToken, profile, done) {
// step 5 ###########################
// verify callback. Now I have user email inside 'profile' and I authenticate this aginst my database. I use `done(..)` to further instruct my app if the registration/authentication with my system was success or not
}
));
next();
}
}
app.use(passport.initialize());
// step 1 ################################
app.get('/auth/facebook/cp/:currentPage', setupFBStrategy(), passport.authenticate('facebook', { authType: 'rerequest', scope: ['email'] }));
app.get('/auth/facebook/callback',
function(req, res, next) {
console.log(req.query.currentPage)
passport.authenticate('facebook', {
successRedirect: '/'+req.query.currentPage, // redirects when user allowed or logged in with username password
failureRedirect: '/'+req.query.currentPage // takes here when user clicks cancel when asked to give permissions
})(req,res,next);
}
);
passport.serializeUser(function(user, done) {
console.log('serialize='+user)
done(null, {});
});
passport.deserializeUser(function(user, done) {
console.log('deserialize=' + user);
done(null, {});
});
的步驟如下:
在我的應用程序用戶點擊「登錄/註冊Facebook」,請求
auth/facebook/cp
路線。路由請求
setUpFBStrategy
。我追加當前頁面用戶正在尋找callbackUrl。PassportJS發送重定向回到用戶瀏覽器和用戶瀏覽器重定向到Facebook進行身份驗證。
當臉書完成身份驗證用戶時,它會發送重定向到用戶瀏覽器,以便瀏覽器重定向到callbackURL,並使用步驟2中指定的URL。它還將'
?code=
'querystring附加到回調URL。這是查詢字符串哈希版Facebook的返回,所以在我的情況下,公共信息和電子郵件?現在我的服務器'
auth/facebook/callback
'被執行並驗證回調被執行。根據我呼籲done(null,profile)
等內部驗證回調服務器返回重定向到瀏覽器和瀏覽器重定向到'successRedirect
或failureRedirect
successRedirect
'或'failureRedirect
'路線。
這一切似乎工作到目前爲止,但我的理解是正確的? 'code
'查詢字符串哈希版本的詳細信息Facebook返回?爲什麼在我的代碼中甚至需要serializeUser
和deserializeUser
函數?我什麼時候可以使用refreshToken
和accessToken
?