FlowRouter.go(redirect); //gets triggered, but site does not actually redirect until refreshed.
我跟着這個guide構建我的路線:FlowRouter.go(重定向)被觸發,但實際上並不重定向
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
但我仍處於「未經授權」佈局,並帶有「歡迎」模板。
- 按刷新按鈕,我將重定向到「未找到」 - 這是正確的結果。
情況2:Session.get( 「redirectAfterLogin」)是未定義的應用程序的
- 註銷。
- 輸入控制檯
Session.set("redirectAfterLogin");
- 登錄
- 觀察控制檯輸出如下:
Accounts.onLogin()
no redirection, go root
但我依然對 「未授權」 佈局,用「歡迎」模板「
- 按刷新按鈕,我將重定向到「/」 - 這是正確的結果。
究竟是什麼阻礙了這裏的邏輯?請幫忙!
看看我上面的解決方案,它可能也會幫助你! – user2587676