鱼C论坛

 找回密码
 立即注册
查看: 1170|回复: 6

[已解决]flask 密码认证问题

[复制链接]
发表于 2022-3-9 14:53:32 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 maxliu06 于 2022-3-9 14:56 编辑

代码如下:    然后通过apipost 请求接口时,     user 永远都是为空的 ,这是为什么??

  1. from flask import Flask, g, request, flash, redirect, url_for, make_response, jsonify
  2. from flask_httpauth import HTTPBasicAuth
  3. app = Flask(__name__)
  4. app.config['SECRET_KEY'] = 'secret key'
  5. app.debug = True


  6. auth = HTTPBasicAuth()


  7. from werkzeug.security import generate_password_hash, check_password_hash

  8. # 模拟数据库
  9. books = ['The Name of the Rose', 'The Historian', 'Rebecca']
  10. users = [
  11.         {'username': 'ethan', 'password': generate_password_hash('6666')},
  12.         {'username': 'peter', 'password': generate_password_hash('4567')}
  13.     ]


  14. # 回调函数
  15. @auth.verify_password
  16. def verify_password(username, password):
  17.     user = filter(lambda user: user['username'] == username, users)
  18.     user = list(user)
  19.     print(user)
  20.     if user and check_password_hash(user[0]['password'], password):
  21.         g.user = username
  22.         return True
  23.     return False


  24. @app.route('/', methods=['POST'])
  25. @auth.login_required
  26. def add_book():
  27.     _form = request.form
  28.     print(_form)
  29.     title = _form["title"]
  30.     if not title:
  31.         return '<h1>invalid request</h1>'
  32.     books.append(title)
  33.     flash("add book successfully!")
  34.     return redirect(url_for('index'))

  35. @auth.error_handler
  36. def unauthorized():
  37.     return make_response(jsonify({'error': 'Unauthorized access'}), 401)

  38. if __name__ == '__main__':
  39.     app.run()
复制代码
最佳答案
2022-3-10 12:42:14
本帖最后由 isdkz 于 2022-3-10 12:49 编辑

因为 HTTPBasicAuth 的认证方式不是通过 post 参数,

而是通过请求头字段Authorization,

规范为 Authorization: basic  ("用户名:密码" 的 base64编码),

例如 ethan:6666 的 base64 编码为 ZXRoYW46NjY2Ng==,

你应该在postman的 Header 而不是 Body 加上 Authorization,值为 basic ZXRoYW46NjY2Ng==,

你可以看一下这篇文章的第七点:
https://blog.csdn.net/qq285679784/article/details/102891070
1.png
2.png
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-9 15:10:05 | 显示全部楼层
咋没有前端代码呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-9 15:12:31 | 显示全部楼层
wp231957 发表于 2022-3-9 15:10
咋没有前端代码呢

和前端没啥关系,就是一个用户认证接口
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-9 15:15:01 | 显示全部楼层
maxliu06 发表于 2022-3-9 15:12
和前端没啥关系,就是一个用户认证接口

用户认证  这个用户不是由浏览器(前端) 传过来的吗  
单纯的后台  咋个认证法???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-9 15:16:59 | 显示全部楼层
maxliu06 发表于 2022-3-9 15:12
和前端没啥关系,就是一个用户认证接口

你那个verify_password() 怎么没有传参????
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-3-10 12:42:14 | 显示全部楼层    本楼为最佳答案   
本帖最后由 isdkz 于 2022-3-10 12:49 编辑

因为 HTTPBasicAuth 的认证方式不是通过 post 参数,

而是通过请求头字段Authorization,

规范为 Authorization: basic  ("用户名:密码" 的 base64编码),

例如 ethan:6666 的 base64 编码为 ZXRoYW46NjY2Ng==,

你应该在postman的 Header 而不是 Body 加上 Authorization,值为 basic ZXRoYW46NjY2Ng==,

你可以看一下这篇文章的第七点:
https://blog.csdn.net/qq285679784/article/details/102891070
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-3-11 09:23:46 | 显示全部楼层
isdkz 发表于 2022-3-10 12:42
因为 HTTPBasicAuth 的认证方式不是通过 post 参数,

而是通过请求头字段Authorization,

感谢之极~!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 01:48

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表