gpt4 book ai didi

python - self.auth.get_user_by_password 在创建帐户后尝试登录用户时引发 InvalidAuthIdError

转载 作者:太空宇宙 更新时间:2023-11-04 06:06:04 32 4
gpt4 key购买 nike

在我注册用户的处理程序中,我有如下代码:

success, info = self.auth.store.user_model.create_user(
"auth:" + username,
password_raw = password)
if success:
self.auth.get_user_by_password("auth:" + username, password)

用户名是早些时候在处理程序中从请求的 POST 参数中获取的。

用户提供有效的用户名(一个尚不存在的用户名)、有效的密码,该代码被执行并且总是导致 auth.InvalidAuthIdError()。当我检查数据存储时,我可以看到已使用指定的身份验证 ID 创建了一个用户。

我花了很多时间对此进行故障排除,其中有一个方面非常令人费解。如果我事先知道我会为用户名等于“someusername”的用户提交注册表单,并将此用户名硬编码到 get_user_by_password 中,如下所示:

self.auth.get_user_by_password("auth:someusername", password)

这似乎使用户正确登录,并且没有引发 InvalidAuthIdError。我不知道如何进一步解决此问题...“auth:someusername”与“auth:”+“someusername”有何不同??

这是我得到的回溯:

Traceback (most recent call last):
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1536, in __call__
rv = self.handle_exception(request, response, e)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1530, in __call__
rv = self.router.dispatch(request, response)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1278, in default_dispatcher
return route.handler_adapter(request, response)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 1102, in __call__
return handler.dispatch()
File "/home/radek/prasowalnia/main.py", line 44, in dispatch
super(BaseHandler, self).dispatch()
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 572, in dispatch
return self.handle_exception(e, self.app.debug)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2.py", line 570, in dispatch
return method(*args, **kwargs)
File "/home/radek/prasowalnia/main.py", line 199, in post
self.auth.get_user_by_password("auth:"+username, password)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2_extras/auth.py", line 459, in get_user_by_password
silent=silent)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2_extras/auth.py", line 278, in validate_password
return self.get_user_by_auth_password(auth_id, password, silent=silent)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2_extras/auth.py", line 150, in get_user_by_auth_password
user = self.user_model.get_by_auth_password(auth_id, password)
File "/home/radek/google_appengine/lib/webapp2-2.5.1/webapp2_extras/appengine/auth/models.py", line 298, in get_by_auth_password
raise auth.InvalidAuthIdError()
InvalidAuthIdError

编辑:这非常奇怪,但如果我将代码修改为:

if success:
time.sleep(1)
self.auth.get_user_by_password("auth:"+username, password)

一切正常,没有抛出任何错误。

编辑:有些不对劲,好像我将代码修改为:

if success:
counter = 0
while True:
try:
counter += 1
self.auth.get_user_by_password("auth:"+username, password)
except:
continue
else:
break
self.write(counter)

我得到的计数器值略高于或低于 20。在生产中如何解决这个问题?我是否应该期望 self.auth.store.user_model.create_user() 可以在没有创建用户实际完成数据存储的情况下返回?我是否应该对我针对数据存储发出的任何 put() 做出这种假设?如果有人对此有所了解,将不胜感激!谢谢!

编辑:阅读一些内容,我猜我正面临这个问题是因为“最终一致的查询”。我可以从 create_user 方法返回的信息中获取新用户的 key ,但 webapp2 似乎没有提供通过数据存储区中的 key 检索用户的方法。

最佳答案

下面应该处理最终一致性带来的问题。

success, info = self.auth.store.user_model.create_user("auth:" + username,
password_raw = password)
if success:
self.auth.set_session(self.auth.store.user_to_dict(info), remember=True)

它应该在不查询 ndb 的情况下登录用户。由于我是 webapp2 的新手,所以我会了解它是如何工作的,如果有任何问题,我会在此处添加信息。

我一直在关注这里的博文:http://gosurob.com/post/20024043690/gaewebapp2accounts虽然不确定为什么其他人没有遇到与我相同的问题。

关于python - self.auth.get_user_by_password 在创建帐户后尝试登录用户时引发 InvalidAuthIdError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21969677/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com