Account.onLogin()上的FlowRouter在Meteor中没有正确重定向

时间:2017-05-16 12:37:17

标签: meteor meteor-accounts

我的所有路线工作正常,我的路线在“ D:\ test \ imports \ startup \ client \ routes.js ”中声明。

  1. 我添加了一个包“gwendall:auth-client-callbacks”。
  2. 我在所有路线的末尾添加了以下代码。

     Accounts.onLogin(function(){
       console.log(Meteor.user().profile.customerType == 'CLIENT'); // shows true
       if(Meteor.user().profile.customerType == 'CLIENT'){
          FlowRouter.go('client');
       } else {
          console.log('else');
       }
    });
    
    Accounts.onLogout(function(){
      FlowRouter.go('/');
    });
    
  3. 当注销模块运行完美时,onLogin()调用会重定向到页面,但使用“ FlowRouter.notFound ”操作。

    以下是我成功登录时返回的页面。

    enter image description here

    如何设法重定向到正确路径而不是'notFound '路径?

    ------------- -------------修订

    PROJECT \进口\启动\客户\ routes.js

    var clientRoutes = FlowRouter.group({
      prefix: '/client',
      name: 'client',
      triggersEnter: [function(context, redirect) {
        if(!Meteor.userId()){FlowRouter.go('/');}
    
        console.log('/Client route called.');
      }]
    });
    
    clientRoutes.route('/', {
      name: 'client-dashboard',
      action: function() {
        console.log("Dashboard called.");
        BlazeLayout.render('App_AuthClient', { main : 'App_UserDashboard'});
      }
    });
    

1 个答案:

答案 0 :(得分:2)

更新

问题更新后,似乎client是FlowRouter组的名称而不是路由名称,即client-dashboard,应该用于重定向用户。

由于您使用的是FlowRouter,我建议采用以下方法:

  1. 创建两个路线组:

    const protectedRoutesGroup = FlowRouter.group({
        triggersEnter: [function () {
            if (!Meteor.userId) {
                FlowRouter.go('login')
            }
        }]
    });
    
    const guestOnlyRoutesGroup = FlowRouter.group({
        triggersEnter: [function () {
            if (Meteor.userId) {
                FlowRouter.go('homepage')
            }
        }]
    });
    
  2. 然后分别定义路线:

    protectedRoutesGroup.route('/', {
        name: 'homepage',
        action () {
            BlazeLayout.render(baseLayout, { main: 'template_name' });
        }
    });
    
    guestOnlyRoutesGroup.route('/', {
        name: 'login',
        action () {
            BlazeLayout.render(baseLayout, { main: 'login_template' });
        }
    });
    
  3. 因此,FlowRouter将根据Meteor.userId cookie值处理重定向。

    你被重定向到404的原因,我猜是没有定义名称为“client”的路由。