当前位置: 首页 > news >正文

flask: flask-httpauth做登录验证

一,安装第三方库

auth

$ pip install flask-httpauth

jwt

$ pip install Authlib

二,代码:

from flask import Blueprint,jsonify,render_template,request
from flask import request, Flask, redirect, url_for, render_template,abort,gfrom flask import g
from flask_httpauth import HTTPBasicAuth, HTTPTokenAuthfrom helpers.utils import failed_response, success_responsefrom authlib.jose import jwt, JoseErrorbasic_auth = HTTPBasicAuth()auth = Blueprint('auth', __name__)@basic_auth.verify_password
def verify_password(username, password):'''用于检查用户提供的用户名和密码'''key = "a1b2c3!"print("username:"+username)print("password:" + password)if password == '':token = username# 检查token是否合法try:data = jwt.decode(token, key)print(data)g.current_user = data['username']return Trueexcept JoseError:return Falseif username!='lhd' or password!='123':return Falseg.current_user = usernamereturn True@basic_auth.error_handler
def basic_auth_error():'''用于在认证失败的情况下返回错误响应'''return failed_response(500,'密码验证错误')@auth.route('/login', methods=['POST'])
@basic_auth.login_required
def login():"""用户登录"""print("当前用户:"+g.current_user)# 默认: 90天, 90*24*60*60 = 7776000 秒expired_time = 7776000data = {'token': generate_auth_token(g.current_user,operation=expired_time).decode(),'username': g.current_user}return success_response(data)@auth.route('/info', methods=['GET'])
@basic_auth.login_required
def info():print("当前用户:"+g.current_user)data = {'username': g.current_user}return success_response(data)def generate_auth_token(username, operation):# 签名算法header = {'alg': 'HS256'}# 用于签名的密钥key = "a1b2c3!"# 待签名的数据负载data = {'username': username, 'operation': operation}return jwt.encode(header=header, payload=data, key=key)

三,测试 效果 :

得到token

注意此处的basic后面的字符串是lhd:123做了base64编码

image

用token访问info

注意此处Basic后面的字符串是token加上: 做了base64编码

image

 

http://www.jsqmd.com/news/37936/

相关文章:

  • 每日一导1
  • HBuilderX快速安装与使用指南 - 从下载到项目创建全流程
  • HBuilderX快速安装与使用指南 - 从下载到项目创建全流程
  • java使用正则表达式替换并保留原字符串,在原字符串前后添加符号
  • 手写识别
  • 01人月神话读后感--软件中的“焦油坑”
  • 线程池FAQ
  • Python Threading new thread
  • 从同步耦合到异步解耦:消息中间件如何重塑系统间的通信范式?
  • 深入理解OpenWrt生态:LuCI、UCI、ubus与rpcd的协同工作机制 - 实践
  • 251111重点
  • 第22天(简单题中等题 二分查找)
  • In the name of capitalists
  • 2025.11.11总结
  • K8S百万资源预list加载数据方案
  • 102302105汪晓红数据采集作业2
  • 【数据结构】:链表的核心实现与运行解析
  • Meta AI 推出全语种语音识别系统,支持 1600+语言;谢赛宁、李飞飞、LeCun 联手发布「空间超感知」AI 框架丨日报
  • Python Socket网络编程
  • 研发度量DORA+SPACE+OST 影响模型
  • 详细介绍:HUD-汽车图标内容
  • 比特币的简单技术原理
  • 后端八股之mysql - 指南
  • 2025年包装机厂家推荐排行榜,全自动包装机,全自动包装机生产线,非标定制生产线,非标定制机器公司精选指南
  • nginx拦截ip
  • 【CI130x 离在线】FIFO的学习及实例
  • 2025年包装机厂家权威推荐榜:全自动包装机、半自动包装机,高效智能包装解决方案精选
  • CF1187F
  • 刷题日记—数组—数组偏移
  • 【数据结构】:C 语言常见排序算法的实现与特性解析 - 指南