Meteor:我可以将第三方登录电子邮件复制到用户文档中的根电子邮件密钥吗?

时间:2015-09-29 22:53:40

标签: meteor

我有一个协作应用,它取决于用户拥有唯一的用户名或电子邮件。

我打算将Google用作第三方登录信息。

我已对其进行了测试,我注意到当我使用Google帐户登录时,该电子邮件在服务密钥下可用,但不存在电子邮件密钥或用户名密钥。

所以我所做的是在Accounts.onCreateUser函数中,我提取电子邮件地址并手动创建带有地址和验证密钥的电子邮件密钥,就像用户正常注册时一样。

喜欢这个

Accounts.onCreateUser (options,user) ->

  unless user.emails?

    emailData = 
      address: determineEmail(user) * this gets [user.services.google.email]
      verified: false

    user.emails = []
    user.emails.push emailData

  if options.profile?
    if options.profile.name?
      nameArr = options.profile.name.split(" ")
      firstName = nameArr[0]
      lastName = nameArr[1]

      options.profile.firstName = firstName
      options.profile.lastName = lastName

    user.profile = options.profile

  user

所以我从谷歌服务中提取电子邮件,然后将其发送给Meteor.user()。电子邮件[0] .address

这是因为我在整个应用中使用了Meteor.user().emails[0].address

这会导致任何问题吗?我以有限的方式对它进行了测试,看起来没问题,但有没有我没考虑过的问题?

2 个答案:

答案 0 :(得分:1)

您可能会发现这个软件包很有用,它会尝试将来自所有不同来源的所有电子邮件保存到一个地方它非常有用

  

这是一个维护registered_emails数组的Meteor包   用户对象内的字段与任何帐户服务电子邮件保持同步   用户用来登录应用程序。

https://atmospherejs.com/splendido/accounts-emails-field

答案 1 :(得分:1)

如果accounts-password包被添加到您的应用中(直接由您添加或作为您添加的其他包的依赖项),则:

    对于该电子邮件地址,
  1. Accounts.createUser()将失败。如果您最终希望允许用户使用Google 密码登录,则这可能会让用户感到困惑,因为用户界面可能会像对待忘记他们的密码一样对待他们从来没有。
  2. 攻击者可以使服务器发送"重置密码"电子邮件到电子邮件地址。
  3. 攻击者可以检查具有该电子邮件地址的用户是否在您的应用中拥有一个帐户(通过调用Accounts.createUser()并查看其是否失败)。这种隐私侵权的严重性取决于应用程序。
  4. 如果这些事情对您很重要,您可能需要将splendido:accounts-emails-field视为Mark Uretsky提及。