FlowRouter.go(redirect); //gets triggered, but site does not actually redirect until refreshed.
このガイドに従って、ルートを構築しました。
var authorised = FlowRouter.group();
var publicRoutes = FlowRouter.group();
FlowRouter.triggers.enter([isUserSignedIn]);
authorised.route('/',{
name:'root',
action(){
BlazeLayout.render('App_body',{ main: 'App_home'});
}
});
publicRoutes.route('/welcome',{
name : 'welcome',
action(){
BlazeLayout.render('Unauthorised', { main: 'welcome' });
}
});
function isUserSignedIn(){
if (!Meteor.user() || Meteor.loggingIn()){
var route = FlowRouter.current();
if (route.path != "/welcome") {
// Set Session to redirect path after login
Session.set("redirectAfterLogin", route.path);
}
console.log("user is not signed in");
FlowRouter.go('welcome');
}
};
// Redirect After Login
Accounts.onLogin(function(){
console.log("Accounts.onLogin()");
var redirect = Session.get("redirectAfterLogin");
if (redirect){
console.log("redirect path exists")
if(redirect != "/welcome"){
console.log("redirect is not welcome path, redirect to ", redirect);
FlowRouter.go(Session.get("redirectAfterLogin"));
}
}
else{
// if redirect doesn't exist, go "/"
console.log("no redirection, go root");
FlowRouter.go('root');
}
})
// Not Found
FlowRouter.notFound = {
action() {
BlazeLayout.render('Unauthorised', { main: 'App_notFound' });
},
};
上記のコードは次のことを行います。
ケース 1: Session.set("redirectAfterLogin", "/blah"); を強制します。
- アプリからログアウトします。
- コンソールに入力
Session.set("redirectAfterLogin", "/blah");
- ログイン
- コンソールで次の出力を確認します。
Accounts.onLogin()
redirect path exists
redirect is not welcome path, redirect to /blah
しかし、私はまだ「許可されていない」レイアウトで、「ようこそ」テンプレートを使用しています」。
- 更新を押すと、「Not Found」にリダイレクトされます - これは正しい結果です。
ケース 2: Session.get("redirectAfterLogin") が定義されていない
- アプリからログアウトします。
- コンソールに入力
Session.set("redirectAfterLogin");
- ログイン
- コンソールで次の出力を確認します。
Accounts.onLogin()
no redirection, go root
しかし、私はまだ「許可されていない」レイアウトで、「ようこそ」テンプレートを使用しています」。
- 更新を押すと、「/」にリダイレクトされます - これは正しい結果です。
ここで論理を妨げているのは正確には何ですか?助けてください!