我很抱歉这个问题有点长,但我已经研究了一段时间,真的需要解释所有的故事。
背景:基于 MEAN 堆栈的应用程序,尝试使用 Passport.js授权Facebook 登录。
按照 Passport.js指南,我实现了类似于:
// HTML
<a href="/connect/facebook" target="_self">Add a Facebook login</a>
// send to facebook to do the authentication
app.get('/connect/facebook',isLoggedIn, passport.authorize('facebook',
{ scope : 'email' })
);
// handle the callback after facebook has authorized the user
app.get('/connect/facebook/callback',
passport.authorize('facebook', {
successRedirect : '/profile',
failureRedirect : '/profile'
}));
注意target=_self
html 中的 ,以便跳过 Angular 路由。显然,授权工作正常。但是,重定向不起作用,因为路由是由 Angular 处理的。授权后,我从未登陆/profile
(但在默认的 Angular 路线上)。
因此,我尝试使用 Passport.js here建议的自定义回调,希望将 json 数据传递给 Angular,并让 Angular 进行路由。我最终做了类似的事情:
// In the controller
$http.get("/connect/facebook").success(function(data){
// here I wait for json data from the server and do the routing
});
// I call this route from Angular
app.get('/connect/facebook',isLoggedIn,passport.authorize('facebook',
{ scope : 'email' })
);
// But Facebook lands here!
app.get('/connect/facebook/callback',function(req, res, next) {
passport.authorize('facebook', function(err, user, info) {
res.json({something:smtg});
...
正如 Passport.js 所解释的,显然自定义回调适用于本地登录。但是在这里你看到问题了吗?我/connect/facebook
从 Angular 打来电话,但我应该从/connect/facebook/callback
.
我即将放弃 Passport,但在此之前,您是否看到任何允许/profile
在 FB 授权后登陆的解决方案,也许带有自定义消息?非常感谢您通读。
编辑:同样的问题已报告为Passport-Facebook GitHub 帐户上的问题。那里已经发布了一些额外的尝试,但还没有完全修复。