You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

继承DefaultSocialAccountAdapter自定义用户名函数报错:lower()被调用在None上

解决方案

错误原因是:当谷歌登录返回的用户数据中,first_name或last_name字段存在但值为None时,data.get('first_name','')会返回None(get方法仅在键不存在时才会使用默认值,键存在但值为None时仍返回None),此时调用lower()就会触发lower() was called on None错误。

修改后的代码如下:

def _build_username(self, data):
    from allauth.utils import generate_unique_username

    if not data.get('username'):
        # 先处理None值,确保调用lower()的是字符串
        first_name = (data.get('first_name') or '').lower()
        last_name = (data.get('last_name') or '').lower()
        
        suggested_username = (f"{first_name}{last_name}",)
        username = generate_unique_username(suggested_username)
        return username

关键改动说明

  • 使用(data.get('first_name') or '')替代原有的data.get('first_name',''):无论字段值是None还是键不存在,都会得到空字符串,避免调用lower()时出现非字符串对象。
  • 如果first_name和last_name都为空,generate_unique_username会自动生成一个唯一的默认用户名(比如user123这类格式),无需额外处理。

内容的提问来源于stack exchange,提问作者user14612843

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 21:45:42