Javascript passport-nodejs-在facebook验证后将用户返回上一页

Javascript passport-nodejs-在facebook验证后将用户返回上一页,javascript,facebook,passport.js,Javascript,Facebook,Passport.js,我是passport的新手,正在尝试将用户重定向到他们之前通过facebook验证后的页面。我试图在会话上设置一个“req.session.returnTo”属性,但它在facebook/auth回调中不断消失(在该函数的任何地方都显示为未定义)。我的方法有什么问题 受保护路线: app.post('/api/recipebox', ensureAuthenticated, function (req, res) { }); 确保重新认证: function ensureAuthentica

我是passport的新手,正在尝试将用户重定向到他们之前通过facebook验证后的页面。我试图在会话上设置一个“req.session.returnTo”属性,但它在facebook/auth回调中不断消失(在该函数的任何地方都显示为未定义)。我的方法有什么问题

受保护路线:

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身份验证和登录:

  • 使用上面链接中的Facebook策略
  • 使用如下所示的布线

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

  • 我正在使用本地策略进行电子邮件和密码登录。我参考以下链接设置passport JS身份验证和登录:

  • 使用上面链接中的Facebook策略
  • 使用如下所示的布线

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

  • 最后我在客户机上做了以下操作:

    $httpProvider.interceptors.push(function ($q) {
    
        return {
          request: function (request) {
            // console.log("hello");
            // console.log(window.location.href);
            request.headers.lastUrl = window.location.href;
            return request;
          },
          responseError: function (response) {
            return $q.reject(response);
          }
        };
      });
    
    在服务器上执行以下操作:

    app.use(function (req, res, next) {
      //req.session.returnTo is available everywhere in router now.
      //filter if it not auth/login/signup, then save it.  only update return to when it's not one of those.  
      if (req.get('lastUrl') !== undefined) {
    
        var lastUrl = req.get('lastUrl');
    
        if (lastUrl.indexOf("login") === -1 && lastUrl.indexOf("signup") === -1 && lastUrl !== "http://localhost:3000/#!/") {
    
          req.session.returnTo = lastUrl;
        }
        console.log(req.session);
      }
      next();
    });
    

    希望它能帮助别人。我没有成功重定向的运气,我认为如果你最终出现在登录/注册/从页面中删除等页面上,事情就不会那么简单了。

    我最终在客户端上完成了以下操作:

    $httpProvider.interceptors.push(function ($q) {
    
        return {
          request: function (request) {
            // console.log("hello");
            // console.log(window.location.href);
            request.headers.lastUrl = window.location.href;
            return request;
          },
          responseError: function (response) {
            return $q.reject(response);
          }
        };
      });
    
    在服务器上执行以下操作:

    app.use(function (req, res, next) {
      //req.session.returnTo is available everywhere in router now.
      //filter if it not auth/login/signup, then save it.  only update return to when it's not one of those.  
      if (req.get('lastUrl') !== undefined) {
    
        var lastUrl = req.get('lastUrl');
    
        if (lastUrl.indexOf("login") === -1 && lastUrl.indexOf("signup") === -1 && lastUrl !== "http://localhost:3000/#!/") {
    
          req.session.returnTo = lastUrl;
        }
        console.log(req.session);
      }
      next();
    });
    
    希望它能帮助别人。我没有成功重定向的运气,我不认为这会是那么简单,如果你最终在页面上像登录/注册/从页面一起带走