我正在使用user-accounts包来管理我的应用中的帐户系统。
我还整合了Google,Github,Twitter和其他第三方服务。
该软件包工作正常,但现在我需要为每个用户提供特定页面,而对于SEO术语,我需要网址如下:
https://domain.com/user/username
我也有帐户密码包。我添加了一个用户名字段,它工作正常。
但是,如果使用第三方服务,则会关闭弹出窗口,并在成功创建用户的情况下重定向页面。我读过关于调用Accounts.onUserCreate
的内容,
这是我的代码:
Accounts.onCreateUser(function(options, user) {
var email = options.profile.email;
var ist = email.indexOf("@");
var uname = email.slice(0,ist);
user.username = uname;
if(options.profile){
user.profile = options.profile;
}
return user;
});
但它会出错:Cannot read indexOf of undefined.
如何实现这一目标?
对于每个新用户,可以有一个页面,输入用户名,或者这样,应该切断电子邮件以创建用户名。 (第二种方法是首选。)
答案 0 :(得分:0)
错误消息告诉您尚未设置可变电子邮件。
在Meteor上使用第三方登录服务时,用户信息不会存储在用户文档的profile
中。相反,您应该在该用户文档的services
数据中查找该电子邮件。例如,对于Facebook,您应该在services.facebook.email
内找到它。
您可能还需要考虑使用user
参数来查找此信息,因为文档说明:“用户参数是在服务器上创建的,包含一个包含所有自动生成的字段的建议用户对象”。