javascript - 单击登录后如何返回 Iron Router 路由和其他路由?

标签 javascript meteor iron-router

在我的应用程序中,用户可以在不登录的情况下匿名导航。有一个下拉菜单可以从任何匿名友好的路线登录。该下拉菜单有一个指向单独的 loginPage 路由的链接,因此在使用 Render.go('loginPage') 单击时会更改路由。我正在尝试弄清楚如何让用户在登录后返回到他们所在的上一页。

我了解典型的 onBeforeAction(requireLogin)... 方法,并且如果页面需要登录才能访问它,则该方法有效。它重新评估 Meteor.user(),然后调用 this.next()

我的问题是,当用户点击登录并被带到loginPage路线时,如何让他们返回到上一页。我试图在点击事件中调用类似 Router.render('loginPage') 的内容,但您无法像您那样在客户端上调用 Router.render()可以在路线内。显然只有 Router.go() 在客户端起作用,从而改变了路由。

我能想到的唯一方法是让我的应用程序中的每个匿名友好路由都有一个 onBeforeAction 来测试 Session 变量(例如 loginRequested )。如果用户单击“登录”,则会设置 loginRequested ,这将使路由无效。一旦他们登录,我将清除 loginRequested,然后 onBeforeAction 将调用 this.next() 将他们带回到上一页。除非用户在浏览器中点击“返回”,否则这将起作用。我必须监听并清除 loginRequested 以便路由验证。 Iron Router 有没有办法做到这一点?

这看起来真的很黑客。有更好的方法吗?

编辑:我忘了提及,我的 loginPage 路由实际上有自己的 action: 如果用户通过 URL 直接进入登录页面,它将把它们转发到特定路线。

最佳答案

登录成功后调用history.back();即可。

例如:

Router.route('/login', {
    onBeforeAction: function(){
        // Do logging stuff
        history.back();
    }
});

Iron Router 本身就有点 hacky,所以如果您决定处理路由中的日志记录,您可能必须在某个地方调用 this.next()

关于javascript - 单击登录后如何返回 Iron Router 路由和其他路由?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907404/

相关文章:

javascript - 避免 JavaScript 插件版本冲突

javascript - 某些模板渲染上的 meteor 回调

meteor ,动态改变模板助手数据

meteor 铁路由器嵌套路由

javascript - 查找 Iron Router 中定义的所有路由

javascript - 无需 secret 即可获取 github OAuth token

javascript - element.cloneNode(true)(深度克隆)的效率如何?

javascript - 如何使用 Meteor 和 Iron Router 通过模板中的路由名称检查路由

javascript - jQuery 在显示后隐藏表单字段

javascript - Meteor 1.0 MiniMongo 不向客户端提供对象