javascript - Passport - NodeJS - Facebook 身份验证后将用户返回到上一页

标签 javascript facebook passport.js

我是 Passport 新手,正在尝试将用户重定向到他们之前在 Facebook 进行身份验证后所在的页面。我试图在 session 上设置一个“req.session.returnTo”属性,但它在 facebook/auth 回调中不断被清除(在该函数中的每个地方都显示为未定义)。我的方法有什么问题吗?

protected 路线:

app.post('/api/recipebox', ensureAuthenticated, function (req, res) {

});

确保经过身份验证:

function ensureAuthenticated(req, res, next) {
    if (req.isAuthenticated()) {
      return next();
    }

      req.session.returnTo = req.path;

      res.redirect('/#!/login');

  }  

//Facebook/Passport.js 回调:

 app.get('/auth/facebook/callback', function (req, res, next) {

    passport.authenticate('facebook', function (err, user, redirectURL) {
      // console.log(' in the callback ');
      if (err) {
        console.log(err);
        return res.redirect('/#!/login');
      }

      if (!user) {
        return res.redirect('/#!/signup');
      }
      if (req.user) {
        // console.log("==================== This is the user from routes.js", req.user);
        res.cookie('user', JSON.stringify(user));
      }
      //actually storing the fact that they are logged in:
      req.login(user, function (err) {
        if (err) {
          return res.redirect('/#!/login');
        }

        // console.log('=========== here!', user);
        res.redirect(req.session.returnTo || '/#!');
        req.session.returnTo = null;

      });
    })(req, res, next);
  })

最佳答案

我正在使用本地策略进行电子邮件和密码登录。我引用以下链接设置我的passport JS认证和登录:Passport Facebook

  1. 使用上面链接中所示的 Facebook 策略。
  2. 使用如下所示的路由

    app.get('/auth/facebook/callback',passport.authenticate('facebook',
                                     successRedirect: 'whatever-url-you-want', 
                                     failureRedirect: '/login' }));
    

关于javascript - Passport - NodeJS - Facebook 身份验证后将用户返回到上一页,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33404593/

相关文章:

javascript - parsley.js 表单验证 - 确认在提交表单时没有发现错误

JavaScript 闭包参数

ios - Facebook App邀请不起作用

authentication - 当凭据为空时,ADFS 返回 "SAML provider returned Responder error: unspecified"

Relay 和 GraphQL 中的身份验证

javascript - 基本 D3.js : create or update element?

javascript - 如何以 Angular 验证javascript内容

iPhone - Facebook 连接

android - 通过 android 中的 facebook/twitter 应用程序共享,如果设备上安装了 facebook/twitter,请不要打开浏览器

node.js - 我们可以从 Passport js中的授权码获取访问 token 吗