我有一个问题,我想做一个应用程序web,所有页面都需要登录身份验证(如facebook),但我不知道如何在用户登录时将其重定向到主页。当我想强迫他转到登录页面时。我正在使用iron:路由器,帐户:登录和coffeescript
提前感谢
OnBeforeActions = loginRequired: () ->
if !Meteor.user()
if Meteor.loggingIn()
else
Router.go 'login'
else
Router.go 'home'
Router.onBeforeAction OnBeforeActions.loginRequired, only: [
'home'
'models'
'photographers'
'createProfil'
'createProject'
]
Router.route '/login', (->
@render 'login'),
name: 'login',
layoutTemplate: 'loginLayout'
在挂钩中,您需要检查用户是否登录,如果用户没有登录,则将路由器重定向到登录页面并停止加载当前路由。如果是,则继续加载当前路线。如果您希望此挂钩在除login
之外的所有页面上运行,我还建议使用except:
而不是only:
。
这里有一个相当于你需要做的事情的javascript(我知道它很有效):
Router.onBeforeAction(function () {
if (!Meteor.userId() && !Meteor.loggingIn()) {
this.redirect('login');
this.stop();
} else {
this.next();
}
},{except: ['login'] });
在coffeescript中(由于我自己不使用coffeesccript,所以我没有测试过):
Router.onBeforeAction (->
if !Meteor.userId() and !Meteor.loggingIn()
@redirect 'login'
@stop()
else
@next()
return
), except: [ 'login' ]
要在登录后重定向用户,请添加一个onLogin
挂钩。
Accounts.onLogin(function () {
Router.go('home');
})
同样,在咖啡中(未经测试):
Accounts.onLogin ->
Router.go 'home'
return
下面的函数将检查用户是否已登录。如果没有,它将检查他/她当前是否正在登录。如果两种情况都为false,我将引导用户使用名称"login"的路由。
loginRequired = function () {
if (!Meteor.user()) {
if (!Meteor.loggingIn()) {
this.render('login');
}
} else {
this.next();
}
};
Router.onBeforeAction(loginRequired, {except: 'login'});