我想在用户点击注册链接时捕获,做一些事情,然后让正常的注册流程继续。但是当我使用onEnrollmentLink()
函数时,它会拖延用户的旅程。
我试过了:
Accounts.onEnrollmentLink(function(token, done){
Session.set('mySessionVar', 'something');
done();
});
我已尝试返回完成回调return done();
或return done
;但这也行不通。
文档声明:
已完成:注册用户界面流程完成时要调用的函数。正常登录过程将暂停,直到调用此函数为止,即使用户B已登录,也可以注册用户A.
可悲的是,文档中没有任何示例,文字也不清楚。有谁知道实现这个功能的正确方法?
答案 0 :(得分:0)
对于任何到达这里的人,因为他们对文档有点困惑。
Accounts.onEnrollmentLink(...)
旨在使用flowRouter,因为它是官方的Meteor路由器,(不是唯一的,但是官方的)。
为了完全完成注册过程,只需设计您想要的内容即可。 例如,常见的情况是通过邀请然后用户访问完成入职,用户将在其中输入所需的密码:
创建用户:
const user = { username, email, password };
并将其设置为
let userId = Accounts.createUser({ username, email, password });
接着是
Accounts.sendEnrollmentEmail(userId);
用户点击该链接并导航到您的网站,在前端您可以使用表单来询问密码。 如果您没有使用Flow路由器,而是使用另一个前端,例如Angular,React或VueJS ,则不会再问Accounts.onEnrollmentLink(...)
。你会做下一步。
按令牌查找用户,该用户应该在网址中设置,可能使用方法代替发布
function findByEnrollToken(token: string) {
return Meteor.users.findOne({ "services.password.reset.token": token });
}
最后,使用前端设置密码的Accounts.resetPassword(token, newPassword, [callback])
设置新用户密码。
就是这样,你可以在同一个提交函数中另外使用Accounts.verifyEmail(token, [callback])
和Accounts.resetPassword()
。