【问题标题】:Redirect user to previous page after authentication验证后将用户重定向到上一页
【发布时间】:2015-06-18 17:08:59
【问题描述】:

我在我的应用程序中通过 Passport 使用 Google 身份验证,并尝试将用户重定向回他们在成功登录后请求的原始页面。我认为location.reload() 可能是问题所在,但不知道如何解决。

routes.js:

router.post('/auth/google/return', passport.authenticate('google'), function(req, res) {
  res.redirect(req.session.returnTo);
  req.session.returnTo = null;
});

middleware.js:

var isAuth = function(req, res, next) {
  if (req.isAuthenticated()) {
    return next();
  } else {
    req.session.returnTo = req.url;
    return res.redirect('/');
  }
};

在按钮点击时调用:

$.post('/auth/google/return', {code: authResult.code, access_token: authResult.access_token}).done(function(data) {
    location.reload();
});

【问题讨论】:

  • 位置不是原生 JavaScript 方法
  • ajax 请求不能很好地与服务器端重定向配合使用。重定向必须在客户端发生,或者,您可以删除 ajax 请求(可能是更好的选择)

标签: javascript node.js express passport.js


【解决方案1】:

试试:

router.post('/auth/google/return', passport.authenticate('google'), function(req, res) {
   var backURL = req.header('Referer') || '/';
   res.json({redir: backURL});
});

还有:

$.post('/auth/google/return', {code: authResult.code, access_token: authResult.access_token}).done(function(data) {
    window.location.href = data.redir;
});

【讨论】:

  • 当我在控制台中查看似乎工作正常时,因为在幕后加载了正确的页面。然而实际页面永远不会更新。奇怪。
  • 谢谢,但不幸的是,这会导致“无法获取/未定义”。
  • 有趣的是,当我用console.log(data) 代替window.location.href = data.redir 时,我看到了我希望看到的页面的所有HTML。这可能是因为我使用 Jade 来提供我的 HTML 文件吗?
  • 你是否也用这个res.json({redir: backURL});改变了节点部分?
  • 这个想法是将 json 中的 url 字符串发送到 post 响应并将其用于 window.location.href
猜你喜欢
  • 1970-01-01
  • 2018-04-29
  • 2017-07-23
  • 2012-12-30
  • 2011-11-08
  • 1970-01-01
  • 2016-10-04
  • 2020-12-08
  • 1970-01-01
相关资源
最近更新 更多