Метеор и железный роутер, подождите при входе в систему

У меня есть маршрут login. Я сделал этот крючок перед действием:

onBeforeAction: function() {

    console.log(Meteor.user())
    console.log(this.route.name)

    // If the user is not logged and if we are not on the login page
    // Redirect the user to the login page
    if( !Meteor.user() && this.route.name !== 'login' ) {
        Router.go('login');
    };

    // If the user is logged, take him out of the login page
    if( Meteor.user() && this.route.name === 'login' ) {
        Router.go('newsletters.index');
    };
}

Но как насчет входа в систему во времени?

Я хотел бы заставить маршрутизатор ждать, если Meteor.loggingIn() верно. waitOn о подписках и не работает.

Я почти уверен, что кто-то еще делал это раньше :)


person fabien    schedule 18.04.2014    source источник
comment
Для чего вам это нужно? Время регистрации обычно довольно короткое и не требует загрузки большого количества маршрутов :-)   -  person Hubert OG    schedule 19.04.2014
comment
У меня есть перенаправление, поэтому, если пользователь заходит на сайт, например, post route и входит в систему, он будет перенаправлен на login route. Потому что я перенаправляю, если Meteor.user() возвращает false. Я мог бы добавить условие входа в систему в перенаправлении, но что, если вход не удастся?   -  person fabien    schedule 19.04.2014


Ответы (1)


Я использую...
Iron-Router ($meteor add cmather:iron-router) и
Accounts-entry ($ meteor add joshowens:accounts- вход).

Вы можете проверить в Git Hub
https://github.com/Differential/accounts-entry
https://github.com/EventedMind/iron-router

Для настройки необходимо создать в папке клиента один архив, например, config.js

Meteor.startup(function () {
    AccountsEntry.config({
      logo: 'logo.png',                  // if set displays logo above sign-in options
      homeRoute: '/',                 // mandatory - path to redirect to after sign-out
      dashboardRoute: '/dashboard',      // mandatory - path to redirect to after successful sign-in
      profileRoute: 'profile',
      passwordSignupFields: 'USERNAME_AND_EMAIL',
      language: 'en',
      showOtherLoginServices: true,     // Set to false to hide oauth login buttons on the signin/signup pages. Useful if you are using something like accounts-meld or want to oauth for api access
      extraSignUpFields: [{             // Add extra signup fields on the signup page
        field: "name",                           // The database property you want to store the data in
        name: "This Will Be The Initial Value",  // An initial value for the field, if you want one
        label: "Full Name",                      // The html lable for the field
        placeholder: "John Doe",                 // A placeholder for the field
        type: "text",                            // The type of field you want
        required: true                           // Adds html 5 required property if true
       }]
    });
  });

после этого вы должны добавить в папку lib/router.js добавить этот код ниже,

var mustBeSignedIn = function(pause) {
    AccountsEntry.signInRequired(this);
};

Router.onBeforeAction(mustBeSignedIn, {
    except: ['entrySignIn', 'entrySignUp', 'entryForgotPassword', 'layout', 'home']
});

Это решение, которое я использую в данный момент.

person Walter Zalazar    schedule 04.09.2014
comment
вы также должны кроме: entryResetPassword - person Guidouil; 25.09.2014