0

Meteor にユーザー プロファイルがあります。

フロールーターを使用しています。

ユーザーがすべてのルートに存在するかどうかを確認したい。

私が試してみました

const userRedirect = ( context, redirect, stop ) => {
  let userId = FlowRouter.getParam( 'userId' );

  if ( Meteor.users.find( { _id: userId } ).count() === 0 ) {
   FlowRouter.go( 'userList' );
  }
};

const projectRoutes = FlowRouter.group( {
  name: 'user',
  triggersEnter: [ userRedirect ]
} );

userRoutes.route( '/users/:userId', {
  name: 'userDetail',
  action: function ( params, queryParams ) {
    BlazeLayout.render( 'default', { yield: 'userDetail' } );
  },
} );

しかし、うまくいきません。

ユーザーコレクションを購読していないためだと思います。

ルートでこれを行うにはどうすればよいですか?使うべきか

const userRedirect = ( context, redirect, stop ) => {
  let userId = FlowRouter.getParam( 'userId' );

  // subscribe to user
  Template.instance().subscribe( 'singleUser', userId );

  // check if found
  if ( Meteor.users.find( { _id: userId } ).count() === 0 ) {
   FlowRouter.go( 'userList' );
  }
};

編集

代わりにテンプレートをチェックインしようとしました

Template.userDetail.onCreated( () => {
  var userId = FlowRouter.getParam( 'userId' );
  Template.instance().subscribe( 'singleUser', userId );
});

Template.userDetail.helpers( {
  user: function () {
    var userId = FlowRouter.getParam( 'userId' );
    var user = userId ? Meteor.users.findOne( userId ) : null;
    return user;
  },
} );

userただし、ユーザー オブジェクトまたは null のいずれかである変数をテンプレートに入力するだけです。

存在しないルートに対して Flow Router が提供する notFound 構成を使用したいと考えています。これは「存在しないデータ」にも適用できると思います。

そのため、ルート パスが/users/:userId存在し、特定の userId を持つユーザーが存在しない場合、ルーターはルートを無効なパスとして解釈する必要があります。

4

1 に答える 1

1

認証ロジックとアクセス許可に関するFlowRouter のドキュメントでは、ルーター自体ではなく、テンプレートで、ログインしていないユーザーとログインしているユーザーに表示されるコンテンツを制御することを推奨しています。通常、iron-router パターンはルーターで認証を行います。

最近の質問の特定の質問について:

html:

{{#if currentUser}}
  {{> yield}}
{{else}}
  {{> notFoundTemplate}}
{{/if}}

トリガーを使用してリダイレクトするには、次の行に沿って何かを試してください。

FlowRouter.route('/profile', {
  triggersEnter: [function(context, redirect) {
    if ( !Meteor.userId() ) redirect('/some-other-path');
  }]
});

まだロードされていないMeteor.userId()場合でも存在することに注意してください。Meteor.user()

ドキュメント

于 2015-11-07T00:03:37.480 に答える