Meteor要求所有页面都登录,如果没有登录,则重定向到登录In iron:router



我有一个问题,我想做一个应用程序web,所有页面都需要登录身份验证(如facebook),但我不知道如何在用户登录时将其重定向到主页。当我想强迫他转到登录页面时。我正在使用iron:路由器,帐户:登录和coffeescript

提前感谢

OnBeforeActions = loginRequired: () ->
    if !Meteor.user()
        if Meteor.loggingIn()
        else
            Router.go 'login'
    else
        Router.go 'home'
Router.onBeforeAction OnBeforeActions.loginRequired, only: [
    'home'
    'models'
    'photographers'
    'createProfil'
    'createProject'
]
Router.route '/login', (-> 
    @render 'login'),
    name: 'login',
    layoutTemplate: 'loginLayout'

在挂钩中,您需要检查用户是否登录,如果用户没有登录,则将路由器重定向到登录页面并停止加载当前路由。如果是,则继续加载当前路线。如果您希望此挂钩在除login之外的所有页面上运行,我还建议使用except:而不是only:

这里有一个相当于你需要做的事情的javascript(我知道它很有效):

Router.onBeforeAction(function () {    
    if  (!Meteor.userId() && !Meteor.loggingIn()) {
        this.redirect('login');
        this.stop();
    } else {
        this.next();
    }
},{except: ['login'] });

在coffeescript中(由于我自己不使用coffeesccript,所以我没有测试过):

Router.onBeforeAction (->
  if !Meteor.userId() and !Meteor.loggingIn()
    @redirect 'login'
    @stop()
  else
    @next()
  return
), except: [ 'login' ]

要在登录后重定向用户,请添加一个onLogin挂钩。

Accounts.onLogin(function () {
    Router.go('home');
})

同样,在咖啡中(未经测试):

Accounts.onLogin ->
  Router.go 'home'
  return

下面的函数将检查用户是否已登录。如果没有,它将检查他/她当前是否正在登录。如果两种情况都为false,我将引导用户使用名称"login"的路由。

loginRequired = function () {
    if (!Meteor.user()) {
        if (!Meteor.loggingIn()) {
            this.render('login');
        }
    } else {
        this.next();
    }
};
Router.onBeforeAction(loginRequired, {except: 'login'});

最新更新