我的基本设置是我有一个登录页面、代表页面和经理页面。
我已经在 Iron 路由器中设置了我的路由,并在之前添加了一些钩子以验证是否存在具有适当角色的用户。对于登录页面,我想查看是否有用户,什么类型的用户(使用角色),如果他们已经登录,然后发送到他们的正确页面。对于用户类型页面,我想检查是否有用户,确保他们在正确的位置,如果没有,将他们发送回登录页面或正确的页面。
每个用户在 profile.organization 中都有一个角色('rep',organizationId)和一个组织。我检查他们在组织中的角色。
这一切都很好,除非有人恢复会话。如果他们从注销开始,它会顺利进行,但如果他们昨天登录并打开网站备份,它只是位于登录页面。我认为这是因为他们正在重新登录。
所以,问题是,处理检查用户是否登录或登录的最佳方法是什么。棘手的部分是我需要从用户配置文件中获取数据以确定将它们发送到哪里,所以如果他们正在登录,我觉得我做不到。我怀疑它与 this.redirect('login') 与 this.render('login') 有关
这是我的登录路线代码
loginsignupController = BaseController.extend ({
layoutTemplate: 'loginLayout',
loadingTemplate: 'loading',
yieldTemplates: {
'header': {to:'header'}
},
before: function() {
//check if logged in
if(!!Meteor.user()){
var org = Meteor.user().profile.organization;
console.log('logged in');
//check for rep, manager
if (Roles.userIsInRole(Meteor.userId(), 'rep', org) || Roles.userIsInRole(Meteor.userId(), 'rep', 'default')){
this.redirect('today')
} else if (Roles.userIsInRole(Meteor.userId(), ['manager'], org)) {
//if manager, send to manager home
this.redirect('managerHome')
}
}
}
});
这是代表路线(用户类型a)
RepController = BaseController.extend({
layoutTemplate: 'repLayout',
loadingTemplate: 'loading',
yieldTemplates: {
'sidebar': {to: 'sidebar'},
'header': {to:'header'}
},
waitOn: function() {
},
data: function () {
},
before: function(){
//check if logged in
if(!Meteor.loggingIn() && !Meteor.user()) {
this.redirect("/login");
} else {
var org = Meteor.user().profile.organization;
console.log('logged in');
//check for rep, manager
if (Roles.userIsInRole(Meteor.userId(), ['manager'], org)) {
//if manager, send to manager home
this.redirect('/managerHome')
}
};
}})
谢谢!