我想将我的应用程序从 google 帐户登录迁移到联合登录。我的应用程序需要用户的电子邮件地址才能正常运行。
如果用户使用主要的身份提供商(Google、Facebook、Yahoo 等),用户是否可以登录但不允许我的应用访问他或她的电子邮件地址?
我可以要求用户提供一个电子邮件地址,但我需要向该地址发送一封电子邮件以确认,让用户点击一个链接等。我宁愿避免这个过程。
我想将我的应用程序从 google 帐户登录迁移到联合登录。我的应用程序需要用户的电子邮件地址才能正常运行。
如果用户使用主要的身份提供商(Google、Facebook、Yahoo 等),用户是否可以登录但不允许我的应用访问他或她的电子邮件地址?
我可以要求用户提供一个电子邮件地址,但我需要向该地址发送一封电子邮件以确认,让用户点击一个链接等。我宁愿避免这个过程。
通常OpenID 属性交换可用于请求特殊用户属性,如电子邮件。
Appengine 在内部使用 AE 来请求用户电子邮件,但不使用其他参数(姓名等)。此外,GAE 也不给您请求其他参数的选项。
因此,您应该通过联合登录获取用户电子邮件,但这取决于 OpenID 提供商,并且他们不能保证始终提供它。
所以有多种解决方案:
仅允许某些提供用户电子邮件的 OpenID 提供商。
如果提供商提供电子邮件,请使用它,否则要求用户提供电子邮件。
或者,您可以改用 OAuth 2.0 并请求用户配置文件。这会在大多数情况下(Google、Facebook)为您提供用户详细信息,包括电子邮件,但并非总是如此(Twitter)。因此,除了登录之外,您还需要执行 1. 或 2.。好处是你会支持非常广泛的 Facebook。