python - GAE/P : Does federated login always include user's email address?

标签 python google-app-engine openid federated-identity

我想将我的应用程序从 Google 帐户登录迁移到联合登录。我的应用程序需要用户的电子邮件地址才能正常运行。

如果用户使用主要身份提供商(Google、Facebook、Yahoo 等),用户是否可以登录但不允许我的应用访问他或她的电子邮件地址?

我可以要求用户提供电子邮件地址,但我需要向该地址发送电子邮件进行确认,让用户单击链接等。我宁愿避免该过程。

最佳答案

通常OpenID Attribute Exchange可用于请求特殊的用户属性,例如电子邮件。

Appengine 在内部使用 AE 来请求用户电子邮件,但不请求其他参数(姓名等)。此外,GAE 不提供请求其他参数的选项。

因此,您应该通过联合登录获取用户电子邮件,但这取决于 OpenID 提供商,并且不能保证他们始终提供该电子邮件。

因此有多种解决方案:

  1. 仅允许某些提供用户电子邮件的 OpenID 提供商。

  2. 如果提供商提供电子邮件,请使用它,否则要求用户提供电子邮件。

或者,您可以使用 OAuth 2.0 并请求用户个人资料。这可以为您提供用户详细信息,包括大多数情况下的电子邮件(Google、Facebook),但并非总是如此(Twitter)。因此,除了登录之外,您还需要执行 1. 或 2. 操作。好处是您可以得到相当广泛的 Facebook 支持。

关于python - GAE/P : Does federated login always include user's email address?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13210882/

相关文章:

python - 为什么 "pickle"和 "multiprocessing picklability"在 Python 中如此不同?

python - 从 pygame 中的文件位置 ptext 指定字体

c# - 结合 c# 和 python 以便在 vs 中制作 Windows 窗体应用程序

python - GAE python线程不并行执行

python - 从 dev_appserver.py 启动时,WingIDE AppEngine 断点不起作用

openid - OpenID 一定是电子商务的好选择吗?

python - 当使用@click.option 将命令行参数传递给函数时,如何返回值?

python - GAE devappserver2 类型错误 : unsupported operand type(s) for -: 'datetime.datetime' and 'NoneType'

web-applications - 如何使 Web 应用程序中的注册用户友好?

php - 如何使用 OpenID for Steam 打印不同数据库上的用户字段?