我在Angular上使用Satellizer,Node后端使用Passport.js进行身份验证。我已根据Satellizer文档实现了登录流程,并能够通过我的Passport / Node服务器将令牌返回给浏览器。 但是,当我返回令牌时,它会返回弹出窗口,而不是Angular应用程序本身。因此,弹出窗口自动关闭后,我在角度应用程序中收到此错误:< / p>
Expecting a token named "token
以下是我的护照路线:
app.post('/login/facebook', passport.authenticate('facebook-login', { 'scope': ['email'] }))
app.get('/login/facebook-callback', passport.authenticate('facebook-login'), function(req, res) { tokenHelper.createSendToken(req.user, res); })
这是我的Passport Facebook策略:
var facebookLoginStrategy = new FacebookStrategy({
clientID: process.env.FACEBOOK_APP_ID,
clientSecret: process.env.FACEBOOK_APP_SECRET,
callbackURL: "http://localhost:8080/login/facebook-callback",
passReqToCallback: true,
profileFields: ['email']
}, function(req, accessToken, refreshToken, profile, done) {
if (!req.user) {
User.findOne({
"facebookData.id": profile.id
}, function(err, user) {
if (err) return done(err);
if (user) {
// Authenticate
console.log('found user')
return done(null, user);
} else {
// Register
console.log('making new user')
var newUser = new User();
newUser.facebookData = profile
newUser.email = profile.emails[0].value
newUser.username = profile.emails[0].value
console.log(newUser)
newUser.save(function(err) {
if (err) throw err;
return done(null, newUser);
});
}
});
} else {
// Authorize
console.log('updating user')
var user = req.user
user.facebookData = profile;
user.save(function(err) {
if (err) throw err;
return done(null, user);
});
}
})
passport.use('facebook-login', facebookLoginStrategy)
即使我使用令牌,我也安装了护照会话,但它仍然将令牌返回到错误的位置。如何使Satellizer将弹出窗口中收到的令牌传递给角度应用程序?或者我是否需要修改我的身份验证流程以适应这些框架?谢谢你的帮助!