私の基本的な設定は、ログインページ、担当者ページ、マネージャーページです。
Iron Router でルートを設定し、適切な役割を持つユーザーが存在することを確認するためにフックの前にいくつか配置しました。ログインページについては、ユーザーがいるかどうか、どのタイプのユーザー (ロールを使用しているか) を確認し、既にログインしている場合は適切なページに送信したいと考えています。ユーザータイプのページについては、ユーザーが正しい場所にいることを確認し、そうでない場合は、ログイン ページまたは正しいページに戻します。
各ユーザーには役割 ('rep',organizationId) があり、profile.organization に組織があります。彼らが組織内でどのような役割を持っているかを確認します。
これは、誰かがセッションを再開する場合を除いて、すべてうまく機能します。ログアウトした状態から開始すると、順調に進みますが、昨日ログインしてサイトを再度開くと、ログインページにとどまります. 再ログインしているからだと思います。
問題は、ユーザーがログインしているかどうかを確認するためのチェックを処理する最善の方法は何かということです。注意が必要なのは、ユーザー プロファイルからデータを取得して、どこに送信するかを決定する必要があることです。 、私はそれができないと思います。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')
}
};
}})
ありがとう!