【问题标题】:How to redirect from server, without the #url from the client?如何在没有来自客户端的#url 的情况下从服务器重定向?
【发布时间】:2014-04-03 10:14:29
【问题描述】:

我有一个 node.js (sail.js) 项目作为服务器端,backbone.marionette 作为客户端。

我正在使用护照来确定用户是否经过身份验证。

module.exports = function(req, res, next)
{
  if (req.isAuthenticated())
        return next();
  else  
    res.redirect('/login');
}

我的问题是:

如果当前 url 是:http://localhost:1337/#users(带有来自客户端的#users),并且服务器会话超时,则res.redirect('/login'); 使用客户端 url 重定向页面,如下所示:http://localhost:1337/login#users

有没有办法在没有 #url 的情况下进行重定向?

【问题讨论】:

  • 只能去掉客户端的位置哈希,所以重定向到做window.location.hash = ''的路由,然后重定向到/login
  • 此代码是服务器代码。 window is not defined
  • 我意识到,这就是为什么我建议链接到具有 clientside 代码的路由,该代码删除哈希,然后重定向到 /login
  • 你没有得到它,哈希在服务器端不可用,你必须输出一个包含window.location.hash = ''的脚本标签,你可以通过链接到输出这样一个脚本的路由来做到这一点标签,删除散列在客户端,然后重定向。

标签: node.js backbone.js sails.js marionette passport.js


【解决方案1】:

找到了解决办法:

我们可以通过重定向到/login# 来解决这个问题。这应该可以解决问题并从 URL 中删除哈希。

【讨论】:

    【解决方案2】:

    # 部分不发送到服务器,# 是由木偶添加的。木偶收到 302 状态并重定向到登录并巧妙地尝试恢复 #users 状态。因此,在这种情况下,您无需在服务器中进行重定向,只需执行 res.render("login")。

    【讨论】:

    • 我知道# 部分没有发送到服务器。但我无法删除它。刷新页面/打开新选项卡时,我无法获取状态并重定向到客户端登录。所以只能在服务器重定向。
    猜你喜欢
    • 1970-01-01
    • 2012-10-21
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-19
    相关资源
    最近更新 更多