我有一个协作应用,它取决于用户拥有唯一的用户名或电子邮件。
我打算将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
。
这会导致任何问题吗?我以有限的方式对它进行了测试,看起来没问题,但有没有我没考虑过的问题?
答案 0 :(得分:1)
您可能会发现这个软件包很有用,它会尝试将来自所有不同来源的所有电子邮件保存到一个地方它非常有用
这是一个维护
registered_emails
数组的Meteor包 用户对象内的字段与任何帐户服务电子邮件保持同步 用户用来登录应用程序。
答案 1 :(得分:1)
如果accounts-password
包被添加到您的应用中(直接由您添加或作为您添加的其他包的依赖项),则:
Accounts.createUser()
将失败。如果您最终希望允许用户使用Google 或密码登录,则这可能会让用户感到困惑,因为用户界面可能会像对待忘记他们的密码一样对待他们从来没有。如果这些事情对您很重要,您可能需要将splendido:accounts-emails-field视为Mark Uretsky提及。