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

Gramex-DBAuth仅允许活跃用户登录的实现方案问询

在Gramex的DBAuth中实现用户激活状态校验

完全可以通过DBAuth的post_auth钩子实现这个需求,具体步骤如下:

1. 配置DBAuth时指定自定义校验函数

在gramex.yaml的DBAuth配置中,添加post_auth参数,指向你编写的自定义校验函数:

auth:
  user_db_auth:
    handler: DBAuth
    kwargs:
      url: mysql+pymysql://user:pass@localhost/dbname  # 替换为你的数据库连接串
      table: user
      user: username
      password: password
      password_hash: bcrypt  # 根据实际密码哈希方式调整,比如sha256、md5等
      post_auth: auth_utils.check_active_status  # 自定义函数的路径

2. 编写自定义激活状态校验函数

创建一个Python模块(比如auth_utils.py),实现check_active_status函数:

def check_active_status(handler, user_info):
    # user_info包含当前登录用户从数据库查询到的所有字段
    if not user_info.get('is_active'):
        # 抛出异常,Gramex会将异常信息作为登录失败提示返回
        raise ValueError('该用户已停用')
    # 校验通过,返回用户信息(可根据需求修改后返回)
    return user_info

关键说明

  • post_auth函数会在密码验证成功后立即执行,是DBAuth提供的扩展钩子
  • user_info参数直接包含数据库user表中当前用户的所有字段,无需额外查询
  • 如果你的is_active字段存储的是整数(比如1代表激活,0代表停用),需要调整判断逻辑为user_info.get('is_active') != 1
  • 确保自定义模块放在Gramex能加载的路径下(比如项目根目录、gramex/apps目录等)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 03:35:20