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

Flask-JWT-Auth中User对象无encode_auth_token属性问题求助

解决AttributeError: 'User' object has no attribute 'encode_auth_token'问题

刚接触Python遇到这种问题很正常,别着急,咱们一步步排查:

这个错误的核心是你创建的User实例找不到encode_auth_token方法,大概率是以下几个常见原因导致的:

1. 先确认模块导入的正确性

你的测试代码里写了from project.server.models import User,先仔细核对:这个导入路径对应的models.py是不是你定义了encode_auth_token方法的那个文件?
有时候项目里如果有重名的User类,或者导入路径写错(比如多了/少了层级),就会导致你用了一个没有这个方法的User类。

2. 检查代码是否保存+环境是否刷新

如果你修改完models.py后没保存,或者运行测试的终端/解释器没重启,内存里可能还是旧的User类定义。

  • 先确保models.py的所有修改都保存了
  • 关闭当前运行测试的进程,重新执行测试命令试试

3. 再核对方法的缩进是否正确

看你贴的models.py代码,encode_auth_token的缩进看起来是和__init__同级的,但再仔细确认下:这个方法必须完全缩进在class User(db.Model):的代码块内部。如果缩进错了(比如少了一层),它就变成了模块级别的函数,而不是User类的实例方法,自然调用不了。

额外的小优化建议

另外,你的encode_auth_token方法现在需要传user_id参数,但作为User的实例方法,其实可以直接用self.id,这样调用更简洁:

# 修改models.py里的方法
def encode_auth_token(self):
    try:
        payload = {
            'exp': datetime.datetime.utcnow() + datetime.timedelta(days=0, seconds=5),
            'iat': datetime.datetime.utcnow(),
            'sub': self.id
        }
        return jwt.encode(
            payload, app.config.get('SECRET_KEY'), algorithm='HS256'
        )
    except Exception as e:
        return e

# 测试代码里调用时改成
auth_token = user.encode_auth_token()

这样更符合面向对象的写法,也避免了传参的冗余。

如果还是没解决,可以在测试代码里加一行print(dir(User)),运行后看看输出里有没有encode_auth_token——如果没有,说明User类确实没这个方法,再回头仔细检查models.py的定义。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:03:14