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

Python Hug框架Basic Auth验证失效问题排查求助

搞定Hug框架Basic Auth不生效的问题

嘿,我一眼就看到你代码里的关键问题了——requires参数的位置放错了!Hug的路由装饰器(比如@hug.get())才是接收requires认证规则的地方,你把它写到函数参数里,导致整个认证逻辑根本没被触发,难怪自定义函数不执行,user一直是None。

先给你修正基础版的正确代码

把requires移到@hug.get()里就行,这样认证逻辑才会生效:

import hug

# 初始化Basic Auth验证器,用内置的verify方法
authentication = hug.authentication.basic(hug.authentication.verify("gordy", "emily"))

# 重点:requires是装饰器的参数,不是函数参数!
@hug.get(requires=authentication)
def token(user: hug.directives.user):
    return user

现在再用Postman测试,只要用户名密码正确,user就会返回"gordy",不会再是null了。

自定义认证函数的正确姿势

如果要替换成自己的认证逻辑,比如从数据库查用户,这么写就对了:

import hug

def custom_auth_check(username, password):
    # 这里可以加你的自定义校验逻辑,比如查询数据库验证用户
    print("自定义认证函数已触发!")
    # 示例校验逻辑
    if username == "gordy" and password == "emily":
        return username  # 验证通过返回用户标识,会传给user参数
    return None  # 验证失败返回None

# 用自定义函数初始化Basic Auth
authentication = hug.authentication.basic(custom_auth_check)

@hug.get(requires=authentication)
def token(user: hug.directives.user):
    return user

这次运行后,控制台会打印你加的调试语句,说明认证函数确实被调用了,验证通过后user也能正常返回。

Postman测试小提醒

  • 直接用Postman的Basic Auth选项填写用户名密码就行,它会自动帮你生成Authorization请求头;
  • 要是手动加请求头的话,记得格式是Authorization: Basic [base64编码的用户名:密码],比如"gordy:emily"编码后是Z29yZHk6ZW1pbHk=,拼起来就是Authorization: Basic Z29yZHk6ZW1pbHk=。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:18:43