web-dev-qa-db-fra.com

Rediriger après la connexion à l'aide de Meteor et Iron Router

J'utilise les options de loginButtons intégrées avec Meteor et je voudrais rediriger après la connexion d'un utilisateur. L'utilisation des extraits de site Web intégrés signifie que je ne peux pas utiliser le rappel avec Meteor.loginwithPassword et que je ne vois aucun crochet à l'intérieur Iron-Router pour faire la redirection.

Aucune suggestion?

22
user2243825

Meteor s'affiche souvent si rapidement que la page est chargée avant que l'utilisateur ait été défini. Vous devez utiliser Meteor.loggingIn() pour tenir compte de la situation dans laquelle vous êtes dans le processus de connexion. Ce code fonctionne pour moi:

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

Cet exemple pourrait être utile

// 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

cela devrait être très facile, ajoutez simplement quelque chose comme:

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

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

Vous pouvez également simplement utiliser le même itinéraire avec un autre modèle au cas où l'utilisateur ne serait pas connecté.

juste quelque chose comme ça:

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

Il n'y a pas de magie, il suffit de regarder dans le docs ;)

5
Boris Kotov

Vous pouvez simplement utiliser l'un de vos itinéraires existants que vous avez configuré en Irlande

Router.go ('/ myRouterPathToTemplate')

1
johntday