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



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

它看起来有点像这样:

账户。onCreateUser (options, user) ->如果options.profile

options.profile.aboutMe = null
options.profile.email = null
options.instrumentsPlayed = null
options.instrumentsPlayedTemporary = null
Router.go('edit_form')
用户

所以它添加了一些字段到配置文件页面,和假定的路由器。Go行应该将用户重定向到edit_form页面。我已经尝试了没有路由器的代码。上线,它工作正常。我在服务器文件中运行这个。当我尝试登录/注册路由器时。去行现在,它给我一个"内部服务器错误",不登录。当我运行它没有,它运行一切正常,但显然没有重定向。问题在哪里?

在客户端尝试如下:

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)

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

可以在注册方法上使用回调,这样当用户创建帐户时,她将被重定向。但最有可能的是,您永远不希望登录用户访问注册或登录页面。为了解决这个问题,你可以使用meteor的反应性。在注册页面上,如果用户已登录,您可以使用钩子重定向用户。

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

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

你也可以在登录页面上使用这个,这样任何登录的人都将被重定向,而不是看到登录页面。

最新更新