5

meteor-routerを使用しています。ユーザーが/user要求/し、すでにログインしている場合は、ユーザーをリダイレクトしたいと思います。

予想どおり、これuser_indexは URL を変更するのではなく、テンプレートをレンダリングするだけです。

Meteor.Router.add
  '/': -> if Meteor.userId() then 'user_index' else 'index'

私はこのようなことをしたい:

Meteor.Router.add
  '/': -> if Meteor.userId() then Meteor.Router.to '/user' else 'index'

2014 年 6 月 4 日更新:

この質問はもはや関連性がなく、代わりにiron-routerを使用する必要があります。

4

5 に答える 5

3

meteor-router は非推奨になりました。代わりに、以下を使用してログイン状態に基づいてリダイレクトできるiron-routerを使用します。

Router.configure({layoutTemplate: 'mainLayout'});

Router.map(function() {
  this.route('splash', {path: '/'});
  this.route('home');
});

var mustBeSignedIn = function(pause) {
  if (!(Meteor.user() || Meteor.loggingIn())) {
    Router.go('splash');
    pause();
  }
};

var goToDashboard = function(pause) {
  if (Meteor.user()) {
    Router.go('home');
    pause();
  }
};

Router.onBeforeAction(mustBeSignedIn, {except: ['splash']});
Router.onBeforeAction(goToDashboard, {only: ['splash']});

例: Meteor.js - レンダリング前にログイン状態を確認する

- また -

accounts-entryパッケージを使用します。彼らのサイトから:

ルートにサインインしているユーザーを確保する

AccountsEntry.signInRequired(this) を使用して、サインインしているユーザーにルートを要求します。これを before フック関数に貼り付けると、リダイレクトされてサインインし、レンダリングが停止します。Accounts Entry は、ユーザーが行こうとしていた場所も追跡し、サインイン後にユーザーを元に戻します。

于 2014-06-04T21:11:45.280 に答える
2

あなたが探している- これはドキュメントfilterのサンプルです:

Meteor.Router.filters({
    'checkLoggedIn': function(page) {
        if (Meteor.loggingIn()) {
            return 'loading';
        } else if (Meteor.user()) {
            return page;
        } else {
            return 'signin';
        }
    }
});

// applies to all pages
Meteor.Router.filter('checkLoggedIn');
于 2013-01-14T20:22:51.727 に答える
0

この問題によると、リダイレクトは meteor-router の一部ではないように見えますが、そうでない可能性もあります。今のところ、私は問題を回避することになりました。リダイレクトに対応するためにプロジェクトが変更された場合は、回答を更新するか、他の人が別の回答を投稿できます。

2013 年 1 月 23 日更新:

このケースを正しく処理し、レイアウトなどの多くの優れた機能を含むmini-pagesの使用に切り替えました。

于 2013-01-17T18:51:47.453 に答える
0

これを行うには、標準フィルターを使用し、リダイレクトを defer オブジェクトでラップします。

Meteor.Router.filters({
requireLogin: function(page) {
    if(! (Meteor.loggingIn()|| Meteor.user()) ){
        Meteor.defer(function () {
            Meteor.Router.to('/login');
        });
    }
    return page;
}

Meteor.Router.filter('requireLogin', {except: 'login'});
于 2014-03-13T15:59:27.887 に答える