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
但我仍然使用“未经授权”的布局,带有“欢迎”模板”。
- 按刷新,我被重定向到“未找到”——这是正确的结果。
案例 2: Session.get("redirectAfterLogin") 未定义
- 注销应用程序。
- 在控制台输入
Session.set("redirectAfterLogin");
- 登录
- 在控制台中观察以下输出:
Accounts.onLogin()
no redirection, go root
但我仍然使用“未经授权”的布局,带有“欢迎”模板”。
- 按刷新,我被重定向到“/” - 这是正确的结果。
究竟是什么阻碍了这里的逻辑?请帮忙!