可以通过输入URL来查看页面?

时间:2014-03-12 01:38:14

标签: html path meteor accounts iron-router

在我的meteor应用程序上,我有一个登录系统,如果您成功登录或注册,则会将您发送到/ dashboard路径。但是,现在只需输入localhost:3000 / dashboard就可以进入/ dashboard路径。我该如何防止这种情况?

4 个答案:

答案 0 :(得分:1)

您可以在挂钩之前使用它来完成此操作。以下是一个包​​含三个路线的简单示例:indexsignindashboard

Router.map(function() {
  this.route('index', {
    path: '/'
  });

  this.route('signin');

  this.route('dashboard');
});

var mustBeSignedIn = function() {
  if (!(Meteor.user() || Meteor.loggingIn())) {
    Router.go('signin');
    this.stop();
  }
};

Router.before(mustBeSignedIn, {except: ['signin']});

在除signin之外的所有路由之前,我们会将用户重定向回signin页面,除非他们已登录或正在登录。您可以在{{3}中看到更多示例IR文档的一部分。

答案 1 :(得分:1)

除了使用路由器挂钩或自定义操作过滤路由之外,您还可以确保模板本身仅显示给特权用户:

<template name="secret">
  {{#if admin}}
    ...
  {{/if}}
</template>

Handlebars.registerHelper('admin', function(options) {
  if(Meteor.user() && Meteor.user().admin) return options.fn(this);
  return options.inverse(this);
});

如果要向所有注册用户显示模板,可以使用{{#if currentUser}}代替,在这种情况下,您无需注册其他帮助。

答案 2 :(得分:1)

您需要在运行每个路由之前检查用户的状态。如果用户未登录(Meteor.userId()返回null),则将用户重定向到登录路由。

Router.before(function() {
  if (!Meteor.userId()) {
    this.redirect('userLoginRoute');
    this.stop();
  }
}, {
  except: ['userLoginRoute', 'userSignupRoute', 'userNewPasswordRoute']
});

答案 3 :(得分:0)

我相信你可以使用custom actions for iron-router。您可以在自定义操作中检查Meteor.userId()是否为null(未登录),并相应地重定向。