【发布时间】:2014-10-01 05:27:27
【问题描述】:
我有一个User 模型,它有姓名、电子邮件和密码。
如果用户正常注册(通过表单),则存储在我的数据库中的密码使用passlib 进行哈希处理。然后,生成一个令牌并将其返回给用户的客户端。令牌是玩家 id 的序列化。为了验证玩家,他只需使用基本身份验证的密码字段中的令牌登录,我只需反序列化令牌并通过反序列化的 id 查找玩家。此外,玩家可以使用密码验证自己。
使用 Google 的 OAuth2 的问题是玩家没有设置他的密码;他只向服务器发送谷歌验证的令牌,服务器将令牌发送给谷歌并获取用户的电子邮件、姓名等。
如何为用户生成密码?我应该在这里做什么?
我现在针对 Google OAuth2 用户注册的 hackish 解决方法很简单:从 Google 获取用户信息,生成伪造密码(经过哈希处理),然后为用户生成身份验证令牌。然后,用身份验证令牌(经过哈希处理)替换虚假密码,并将其作为用户密码插入。然后将身份验证令牌返回给用户的客户端。
换句话说,身份验证令牌成为密码。现在我的身份验证令牌也不会过期。
显然,这是一个巨大的 hack。这样做的正确方法是什么?每次用户需要验证自己时,我应该只 ping Google 吗?
【问题讨论】:
标签: python authentication oauth flask