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
相关产品推荐
相关产品推荐

