Django集成Google OAuth2社交认证时用户名与邮箱字段互换问题
问题原因及排查方案
出现username和email字段互换,大概率是以下几个环节出错导致,按优先级排查即可:
- 参数传递顺序错误:
register_social_user函数定义的入参顺序为provider, user_id, email, name,如果你调用该函数时,把Google OAuth返回的邮箱和用户姓名位置传反,就会直接导致存库时两个字段内容互换。你可以在函数第一行加打印print(email, name)确认入参是否正确。 - Google返回字段取值错误:Google OAuth2的userinfo接口返回的用户邮箱对应字段为
email,用户姓名对应字段为name,如果你解析返回结果时把两个字段的key写反,拿到的原始值本身就是颠倒的,存库自然会出错。直接打印Google返回的原始用户信息即可验证。 generate_username函数逻辑异常:检查该函数的实现,如果它错误将入参直接返回、或者内部逻辑把输入的姓名替换成了邮箱值,也会导致生成的username实际是邮箱内容。打印该函数的入参和返回值即可验证。UserManager的create_user方法实现错误:你提供的代码中没有给出自定义UserManager的实现,如果该方法重写时,把传入的username参数赋值给了email字段、email参数赋值给了username字段,哪怕上层传参正确,存库也会出现互换。
内容的提问来源于stack exchange,提问作者Abinash Karki
相关产品推荐
相关产品推荐

