我的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行登录/注册时,它会给我一个“内部服务器错误”并且不会登录。当我不运行它时,它会正确运行所有内容但显然不会重定向。问题出在哪里?
答案 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()
的结果已经改变了,因此她将被重定向。
您也可以在登录页面上使用此功能,因此任何登录的人都将被重定向,而不是看到登录页面。