我一直在我的服务器上使用Passport进行用户身份验证.当用户登录本地(使用用户名和密码),服务器就给他们一个JWT存储在本地存储,并且被发送回服务器,每个API调用需要用户身份验证.
现在我也想支持Facebook和Google登录.自从我开始使用Passport后,我认为最好继续使用Passport策略,使用passport-facebook和passport-google-oauth.
我将参考Facebook,但两种策略的行为都相同.它们都需要重定向到服务器路由('/ auth/facebook'和'/ auth/facebook/callback').该过程是成功的,以保存用户,包括他们的Facebook \谷歌ID和令牌上的令牌.
在服务器上创建用户时,会创建一个JWT(不依赖于从facebook\google收到的令牌).
... // Passport facebook startegy
var newUser = new User();
newUser.facebook = {};
newUser.facebook.id = profile.id;
newUser.facebook.token = token; // token received from facebook
newUser.facebook.name = profile.displayName;
newUser.save(function(err) {
if (err)
throw err;
// if successful, return the new user
newUser.jwtoken = newUser.generateJwt(); // JWT CREATION!
return done(null, newUser);
});
Run Code Online (Sandbox Code Playgroud)
问题是,在创建之后,我找不到将JWT发送到客户端的正确方法,因为我还应该重定向到我的应用程序.
app.get('/auth/facebook/callback',
passport.authenticate('facebook', {
session: false,
successRedirect …
Run Code Online (Sandbox Code Playgroud)