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

Meteor require login for all pages and redirect to login if not loggingIn iron:router

我有一个问题,我想做一个应用程序网络,其中所有页面都需要登录身份验证(如 facebook),但我找不到如何在用户登录时将他重定向到主页。当我想强迫他去登录页面时。 我正在使用 iron:router、account:login 和 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'

在你的挂钩中,你需要检查用户是否登录,如果他们没有登录,那么你将路由器重定向到登录页面并停止加载当前路由。如果是,那么您将继续加载当前路线。我还建议使用 except: 而不是 only: 如果你希望这个钩子在除 login.

之外的每个页面上都指向 运行

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

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

在 coffeescript 中(我没有测试过,因为我自己不使用 coffeescript):

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

以下函数将检查用户是否已登录。如果没有,它将检查 he/she 当前是否正在登录。如果两种情况都为假,我会将用户定向到具有名称的路由'login'。

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

Router.onBeforeAction(loginRequired, {except: 'login'});