【问题标题】:Meteor: Adding fields to Third Party User creationMeteor:向第三方用户创建添加字段
【发布时间】:2015-07-04 15:46:35
【问题描述】:

我正在使用user-accounts 包来管理我的应用程序中的帐户系统。

我还集成了 Google、Github、Twitter 和其他第三方服务。

这个包工作正常,但现在我需要为每个用户提供一个特定的页面,对于 SEO 术语,我需要这样的 url:

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.

如何做到这一点?

可以有一个页面,为每个新用户输入用户名,或者这样,电子邮件应该被切片以创建用户名。 (首选第二种方法。)

【问题讨论】:

    标签: javascript meteor meteor-accounts


    【解决方案1】:

    错误消息告诉您您的可变电子邮件尚未设置。

    在使用 Meteor 的第三方登录服务时,用户信息不会存储在用户文档的profile 中。相反,您应该在该用户文档的services 数据中查找电子邮件。例如,对于 Facebook,您应该在 services.facebook.email 中找到它。

    您可能还需要考虑使用 user 参数来查找此信息,因为文档指出:“用户参数是在服务器上创建的,并且包含一个建议的用户对象以及所有自动生成的字段 em>”。

    【讨论】:

    • 这确实说明了问题,但并没有解决问题。
    • 对不起,这不够明确。您的第一条语句不适用于第三方服务,因为 options.profile.email 不存在 - 因此计算结果为 undefined。因此,您实际上说的是var email = undefined。您可能希望更改代码以将 email 设置为正在使用的任何第三方服务 - 例如 var email = user.profile.email || user.services.facebook.email || //...(your other login services)
    猜你喜欢
    • 2014-06-23
    • 2016-08-21
    • 1970-01-01
    • 2015-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 2018-09-07
    相关资源
    最近更新 更多