无法使用 facebook 的护照成功重定向

Posted

技术标签:

【中文标题】无法使用 facebook 的护照成功重定向【英文标题】:Not able to reach successRedirect using passport for facebook 【发布时间】:2016-04-16 08:32:33 【问题描述】:

我正在编写一个“todolist”网络应用程序并使用 passport-facebook 进行第三方身份验证。这是我使用的代码:

passport.use(new FacebookStrategy(
   clientID: '566950043453498',
   clientSecret: '555022a61da40afc8ead59c6c26306ed',
   callbackURL: 'http://www.localhost:3000/auth/facebook/Todolistpage.html'
,
 function(accessToken, refreshToken, profile, done) 
    console.log("hello " + profile.displayName);

    done(null); 
 
));

//Authentication
app.get('/auth/facebook', passport.authenticate('facebook'));

app.get('/auth/facebook/Todolistpage.html',
passport.authenticate('facebook',  successRedirect:'/auth/facebook/Todolistpage.html',
                                  failureRedirect: '/login' )); 

用户点击以下内容:

<a href="/auth/facebook">Login with Facebook</a>

我成功使用 facebook 登录,但我被重定向到代码的 failureRedirect 部分中指定的路径。它是怎么做到的?如果成功登录 facebook,我如何让它转到 successRedirect 中指定的路径?

【问题讨论】:

【参考方案1】:

使用此代码:

app.get('/auth/facebook', passport.authenticate('facebook',  scope: [ 'email', 'user_about_me'], failureRedirect: '/', successRedirect: 'back' ));
app.get('/auth/facebook/callback', passport.authenticate('facebook', failureRedirect: '/facebook' ), users.authCallback);

在服务器站点代码中:

exports.authCallback = function (req, res) 
    res.redirect('/');
 // this will help you to redirect specific page.

【讨论】:

【参考方案2】:

如果您要更改端点,您还需要将 FacebookStrategy 中的 callbackURL 设置为 '/auth/facebook/callback' :)

passport.use(new FacebookStrategy(
   clientID: '566950043453498',
   clientSecret: '555022a61da40afc8ead59c6c26306ed',
   callbackURL: 'http://www.localhost:3000/auth/facebook/callback'
, function(accessToken, refreshToken, profile, done) 
    console.log("hello " + profile.displayName);
    done(null); 
 
));

//Authentication
app.get('/auth/facebook', passport.authenticate('facebook'));

router.get('/auth/facebook/callback', passport.authenticate('facebook', 
    failureRedirect: '/login?failedSocial=facebook'
  ), auth.authCallback);

并且在身份验证服务中

exports.authCallback = function (req, res) 
    res.redirect('/');

【讨论】:

以上是关于无法使用 facebook 的护照成功重定向的主要内容,如果未能解决你的问题,请参考以下文章

护照认证失败导致重定向循环

ShareKit2.0 打开 Facebook 手机,但无法重定向。 Safari 说页面无效

如何使用护照发送成功重定向的用户个人资料数据?

无法在 facebook SDK Manager 中找到选项有效的 oauth 重定向 url

使用带护照本地的护照Facebook策略时无法将用户序列化到会话中

req.user 未定义 - 节点 + 快递 + 护照-facebook