创建帐户的Route.go()不起作用(METEOR)

时间:2014-07-02 10:42:25

标签: javascript coffeescript meteor iron-router

我的webapp上有一个钩子,用户在首次登录/注册时将用户重定向到编辑个人资料页面。

看起来有点像这样:

Accounts.onCreateUser(options,user) - >   如果options.profile

options.profile.aboutMe = null
options.profile.email = null
options.instrumentsPlayed = null
options.instrumentsPlayedTemporary = null

Router.go('edit_form')

用户

因此,它会在配置文件页面中添加一些字段,并且应该将Router.go行重定向到edit_form页面。我已经尝试了没有Router.go线的代码,它运行正常。我在服务器文件中运行它。当我尝试使用Router.go行登录/注册时,它会给我一个“内部服务器错误”并且不会登录。当我不运行它时,它会正确运行所有内容但显然不会重定向。问题出在哪里?

2 个答案:

答案 0 :(得分:1)

在客户端上尝试使用这样的smth:

Template.signup.events "submit #signup": (e, t) ->
 Meteor.call "registerUser", email, password, profile, (err, result) ->
   if err
     throwError err.reason
     console.log err
   else
     Router.go "/edit_form"

Accounts.onCreateUser (options, user)仅适用于服务器,但您需要重定向客户端。 registerUser这是我的Meteor方法,我打电话给Accounts.onCreateUser (options, user)

答案 1 :(得分:1)

首先,您要在客户端上运行重定向,而不是在服务器上运行。

可以在注册方法上使用回调,这样当用户创建帐户时,她将被重定向。但很可能您从不希望登录用户访问注册表或登录页面。要处理它,你可以使用Meteors的反应性。在注册页面上,您可以使用挂钩在用户登录时重定向用户。

this.route('register', {
  onBeforeAction: function() {
    if (Meteor.userId())
      this.redirect('myRouteForLoggedInUsers')
  }
});

现在,当用户注册时,她在register路线上,但她没有登录,因此她不会被重定向。一旦注册过程完成,她仍然会在register路线上,但她将登录。由于Meteors的反应性,onBeforeAction功能将重新运行(因为Meteor.userId()的结果已经改变了,因此她将被重定向。

您也可以在登录页面上使用此功能,因此任何登录的人都将被重定向,而不是看到登录页面。