在我的应用程序中,用户可以在不登录的情况下匿名导航。有一个下拉菜单可以从任何匿名友好的路线登录。该下拉菜单有一个指向单独的 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/