Redirect after Login using Meteor and Iron Router

2020-02-07 19:38发布

I'm using the built in loginButtons options with Meteor and I would like to redirect after a user logs in. Using the built in web snippets means I can't use the callback with Meteor.loginwithPassword and I can't see any hooks inside Iron-Router to do the redirect.

Any suggestions?

4条回答
成全新的幸福
2楼-- · 2020-02-07 19:53

Meteor often renders so quickly that the page is being loaded before the user has been defined. You need to use Meteor.loggingIn() to account for the situation in which you are in the process of logging in. This code works for me:

this.route('myAccount', {
  path: '/',
  onBeforeAction: function () {
    if (! Meteor.user()) {
      if (!Meteor.loggingIn()) Router.go('login');
    }
  }
}
查看更多
beautiful°
3楼-- · 2020-02-07 20:03

it should be very easy just add something like:

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

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

You can also just use the same route with another template in case the user is not logged in.

just something like this:

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

There is no magic, just looked into the docs ;)

查看更多
相关推荐>>
4楼-- · 2020-02-07 20:08

This example might be useful

// 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');
});
查看更多
Lonely孤独者°
5楼-- · 2020-02-07 20:15

You can simply use one of your existing routes you have configured in Ireland route

Router.go('/myRouterPathToTemplate')

查看更多
登录 后发表回答