1
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"); を強制します。

  1. アプリからログアウトします。
  2. コンソールに入力Session.set("redirectAfterLogin", "/blah");
  3. ログイン
  4. コンソールで次の出力を確認します。
    • Accounts.onLogin()
    • redirect path exists
    • redirect is not welcome path, redirect to /blah

しかし、私はまだ「許可されていない」レイアウトで、「ようこそ」テンプレートを使用しています」。

  1. 更新を押すと、「Not Found」にリダイレクトされます - これは正しい結果です。

ケース 2: Session.get("redirectAfterLogin") が定義されていない

  1. アプリからログアウトします。
  2. コンソールに入力Session.set("redirectAfterLogin");
  3. ログイン
  4. コンソールで次の出力を確認します。
    • Accounts.onLogin()
    • no redirection, go root

しかし、私はまだ「許可されていない」レイアウトで、「ようこそ」テンプレートを使用しています」。

  1. 更新を押すと、「/」にリダイレクトされます - これは正しい結果です。

ここで論理を妨げているのは正確には何ですか?助けてください!

4

2 に答える 2