web-dev-qa-db-ja.com

ログイン後にMeteorとIron Routerを使用してリダイレクトする

Meteorで組み込みのloginButtonsオプションを使用しています。ユーザーがログインした後にリダイレクトしたいと思います。組み込みのWebスニペットを使用すると、Meteor.loginwithPasswordでコールバックを使用できず、内部にフックが表示されません。リダイレクトを行うためのIron-Router。

助言がありますか?

22
user2243825

多くの場合、Meteorは非常に高速にレンダリングされるため、ユーザーが定義される前にページがロードされます。あなたがログインしているプロセス中である状況を説明するには、Meteor.loggingIn()を使用する必要があります。このコードは私にとってはうまくいきます:

this.route('myAccount', {
  path: '/',
  onBeforeAction: function () {
    if (! Meteor.user()) {
      if (!Meteor.loggingIn()) Router.go('login');
    }
  }
}
22
Charlie Morris

この例は役に立つかもしれません

// main route render a template
Router.route('/', function () {
    this.render('main');
});

// render login template
Router.route('/login', function () {
    this.render('login');
});  


// we want to be sure that the user is logging in
// for all routes but login
Router.onBeforeAction(function () {
    if (!Meteor.user() && !Meteor.loggingIn()) {
        this.redirect('/login');
    } else {
        // required by Iron to process the route handler
        this.next();
    }
}, {
    except: ['login']
});

// add here other routes

// catchall route
Router.route('/(.*)', function () {
    this.redirect('/catchallpage');
});
6
Brice

次のようなものを追加するだけで非常に簡単です:

Tracker.autorun(function() {
  var currentRoute = Router.current();
  if (currentRoute === null) {
    return;
  }

  if (currentRoute.route.getName() === 'login' && Meteor.user() !== null)
    Router.go('WelcomeNewUser');
  }

ユーザーがログインしていない場合に備えて、別のテンプレートで同じルートを使用することもできます。

ちょうどこのようなもの:

this.route('myAccount', {
   before: function () {
     if (!Meteor.user()) {
       this.render('login');
       this.stop();
     }
   }
}

docs ;)を見ただけで、魔法はありません。

5
Boris Kotov

アイルランドのルートで構成した既存のルートの1つを使用するだけです

Router.go( '/ myRouterPathToTemplate')

1
johntday