Djangae Gauth整合

问题描述 投票:0回答:1

我正在遵循Djangae文档的“Gauth身份验证”部分,但我遇到了一些意想不到的行为。

我已经配置了文档中指定的urls.py和settings.py(当前设置主要是使用Djangae Scaffold的结果)但是用户不会在任何时候使用或链接他们的Google帐户进行身份验证。我尝试过un / setting DJANGAE_CREATE_UNKNOWN_USER,但这没有任何影响。

我还尝试在本地shell中运行受sitepackages / prod / djangae / contrib / gauth / tests.py启发的命令,以验证后端配置是否已正确配置,并且用户实际上可以针对AppEngineUserAPIBackend进行身份验证,但是失败,因为我的用户模型(djangae.contrib.gauth_datastore.models.GaeDatastoreUser)似乎缺少必需的属性:AttributeError: 'GaeDatastoreUser' object has no attribute 'user_id'

那么,我是否误解了这一切应该如何运作,并且必须采取一些额外措施才能让Google Sign-In正常工作?或者我(可能)错误配置了我的申请? (我很高兴包含我的配置的通用版本,但正如我所说,它们直接来自Djangae Scaffold或文档。)

更新:有趣的是,如果我从我的行为套件配置中删除--headless标志,我会看到预期的行为。浏览器(Chrome)正被重定向到https://accounts.google.com/Login?continue=http%3A%2F%2Flocalhost%3A8080%2F

环境:

Djangae(0.9.11)

Django(1.11.19)

django google-authentication djangae
1个回答
0
投票

事实证明,这是预期的行为。在本地沙箱中,系统会提示用户输入电子邮件地址,并且(默认情况下)会为其创建“用户”,并自动登录。

从App Engine的“用户Python API概述”文档:

Google帐户和开发服务器

开发服务器使用虚拟登录屏幕模拟Google帐户系统。当您的应用程序调用Users API以获取登录屏幕的URL时,API会返回一个特殊的开发服务器URL,提示您输入电子邮件地址,但不会输入密码。您可以在此提示中键入任何电子邮件地址,该应用程序的行为就像您使用该地址的帐户登录一样。

虚拟登录屏幕还包括一个复选框,指示虚拟帐户是否为管理员;也就是说,帐户是否具有Viewer,Editor或Owner原语角色,或App Engine App Admin预定义角色。如果选中此框,则应用程序的行为就像您使用管理员帐户登录一样。

同样,Users API会返回取消虚拟登录的注销URL。

开发服务器中User对象的唯一ID是根据电子邮件地址计算的。两个唯一的电子邮件地址始终代表开发服务器中的两个唯一用户

就个人而言,我认为这种设计存在很大缺陷。我不知道谷歌对十二因素宣言的看法,但这种行为公然违反了第10条(Dev / Prod Parity),其总结为“尽可能保持开发,分期和生产”。我认为没有理由为什么完整的身份验证/重定向流在本地沙箱中不起作用,并且至少用户应该能够选择它。 (我很想知道这是一个选择。)

关于这个条件行为最关注的部分是用户对象的API不同,这就是为什么我看到我的问题中提到的错误('GaeDatastoreUser'对象没有属性'user_id')。本地用户也没有nickname方法。

© www.soinside.com 2019 - 2024. All rights reserved.