当前位置: 首页 > 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.gsyq.cn/news/46922.html

相关文章:

  • 手写识别
  • 深入理解OpenWrt生态:LuCI、UCI、ubus与rpcd的协同工作机制 - 实践
  • 251111重点
  • In the name of capitalists
  • 102302105汪晓红数据采集作业2
  • 【数据结构】:链表的核心实现与运行解析
  • 11.11每日总结
  • 拥护向量机(SVM)(二)---优化算法
  • Python show memory
  • 断句
  • 保姆级教程 十分钟带你配置好vscode xdebug
  • 后端八股之mysql - 指南
  • 刷题日记—数组—数组偏移
  • 完整教程:阿里云k8s部署微服务yaml和Dockerfile文件脚本
  • Markdown语法的学习①
  • 第二次作业-何玮鑫
  • 题解:P8127 [BalticOI 2021] The Xana coup (Day2)
  • 2025年EGUOO肠胃片深度解析:科学复配视角下的胃肠健康新答案
  • logging 模块
  • Tarjan の 套餐
  • postman: 用HTTPBasicAuth的方式发送账号密码
  • 2025 ICPC 南京区域赛游记
  • 详细介绍:Kuikly 小白拆解系列 第1篇|两棵树直调(Kotlin 构建与原生承载)
  • 丝路杯
  • CTF 流量分析- Wireshark 核心教程:从网卡抓包到 2025 - CTF 流量分析题目技巧
  • CF round vp 选记
  • 详细介绍:微服务时代的前后端协作:API契约驱动开发实践
  • ZROI-NOIP2025做题记录
  • week1--RE--刷题记录
  • Pycharm常用设置