我的基本設置是我有一個登錄頁面,代表頁面和管理頁面。從簡歷中處理用戶驗證鐵路由器的最佳方式
我建立了我的鐵路由器的路由,並把一些掛鉤之前,驗證是否有適當角色的用戶。對於登錄頁面,我想查看是否有用戶,是什麼類型的用戶(使用角色),然後發送到他們正確的頁面(如果他們已經登錄)。對於用戶類型頁面,我想檢查是否存在一個用戶,確保他們在正確的地方,如果沒有,將他們發回登錄頁面或正確的頁面。
每個用戶都有一個角色( '代表',organizationId),並在profile.organization的組織。我檢查他們在組織中的角色。
這一切都很好,除非有人恢復會話。如果他們從註銷開始,它會順風順水,但如果他們昨天登錄並打開網站備份,它只是位於登錄頁面。我認爲這是因爲他們正在重新登錄。
因此,問題是,處理檢查以查看用戶是否已登錄或登錄的最佳方法是什麼。棘手的部分是我需要從用戶配置文件來確定將它們發送到哪裏,所以如果他們登錄,我認爲我不能這樣做。我懷疑它是與this.redirect(「登錄」)VS this.render(「登錄」)
這裏是我的登錄路由
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')
}
}
}
});
代碼,並在這裏它是爲代表路線(用戶類型)
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')
}
};
}})
謝謝!
感謝@Akshat。我的印象是,.wait()實際上不會等待訂閱來運行其他的東西,只是等待呈現頁面。我會試一試,看看它是如何發展的。 –