flask的基本使用 token插件(二)

一、安装flask-jwt-extended

安装flask-jwt-extend得时候 会自动安装一个pyjwt得库。pyjwt可以直接使用来生成JWT和验证。但是在flask中,可以通过Flask-JWT-Extended来实现JWT能,因为他封装了使用方式,以及一些属性和装饰器,用起来更加方便

pip install flask-jwt-extended

二、基本使用

1.简介

1.1 create_access_token()

create_access_token 函数用来生成实际的 JWT token

1.2 @jwt_required()

@jew_required 装饰器可以用来保护路由

1.3 get_jwt_identity()

get_jwt_identity()函数用来保护视图里面获取用户的身份信息。

2.初始化项目

创建python包 名称为api.
编辑api内 “init.py” 文件

from flask import  Flask,blueprints
from flask_jwt_extended import JWTManager
from .views.home import blue_home


#创建flask 实例的函数
def create_app():
    app = Flask(__name__)
    app.config["SECRET_KEY"] = "super-secret"
    app.register_blueprint(blue_home)
    return  app

# 初始化jwt的函数
def create_jwt(app):
    jwt = JWTManager()
    jwt.init_app(app)
    return jwt

3.创建token

编写main.py

from flask import request,jsonify
from api import create_app,create_jwt
from flask_jwt_extended import create_access_token

app = create_app()
jwt = create_jwt(app)


@app.route('/login',methods=["POST"])
def index():
    username = request.form.get("username")
    password = request.form.get("password")
    if username == "admin" and password == "admin":
        # 当用户登陆成功,创建token并返回
        access_token = create_access_token(identity="admin")
        return  jsonify(access_token)
    else:
        return "用户名或者密码错误!!!"


if __name__ == "__main__":
    app.run(debug=True,host="0.0.0.0")

请求127.0.0.1:5000/login得到访问token

"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTcwNzAzNTg5MSwianRpIjoiNGJjNjY4NDctZTQxYy00ZjdmLWIxZWYtOTNjYjJmMTBjYzFmIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6ImFkbWluIiwibmJmIjoxNzA3MDM1ODkxLCJjc3JmIjoiY2VlZGNkZmMtNDIwMS00NmE4LWEzYTItZDRhNTliMDIwYjQ5IiwiZXhwIjoxNzA3MDM2NzkxfQ.SzMKMthP_xQ02QwgFwSu3Refc2oz1EseFgntPzS5U0g"

4.保护视图

创建一个视图函数 views/home.py

from flask import  Blueprint
from flask_jwt_extended import jwt_required,get_jwt_identity

blue_home = Blueprint('home',__name__)

@blue_home.route('/home')
# 校验token 的函数
@jwt_required()
def home():
    # 可以获取token中的用户
    print(get_jwt_identity())
    return "<h1>home页面<h1>"

当用户不带token访问的时候,会报错

{
  "msg": "Missing Authorization Header"
}

客户端携带token认证格式

import requests,json
header = {
    "Authorization": "Bearer eyJhbGciOi.................."
}
res = requests.get("http://127.0.0.1:5000/home",headers=header)

参考连接:https://juejin.cn/post/7234450312726691898#heading-1

  • 5
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Axios 是一个基于 Promise 的 HTTP 请求库,可以在浏览器和 Node.js 中使用次封装 axios 主要是为了方便使用和统一管理请求,通常我们会在次封装中加入一些通用的处理逻辑,例如添加请求头、统一处理错误等。 以下是一个简单的 axios 次封装示例: ```javascript import axios from 'axios'; const instance = axios.create({ baseURL: 'https://api.example.com', timeout: 5000, }); // 添加请求拦截器 instance.interceptors.request.use( config => { const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, error => { return Promise.reject(error); } ); // 添加响应拦截器 instance.interceptors.response.use( response => { return response.data; }, error => { return Promise.reject(error.response.data); } ); export default instance; ``` 在这个示例中,我们通过 create 方法创建了一个 axios 实例,设置了基础 URL 和超时时间。然后通过添加请求拦截器,我们可以在每次请求中携带 token,以便后端验证用户身份。最后,通过添加响应拦截器,我们可以统一处理错误响应,返回对应的错误信息。 使用这个次封装后的 axios,我们可以直接调用它的 get、post 等方法,例如: ```javascript import request from './request'; request.get('/users').then(data => { console.log(data); }).catch(error => { console.log(error); }); ``` 在这个示例中,我们通过 import 引入了之前封装好的 axios 实例,然后调用了它的 get 方法,请求了 /users 接口。如果请求成功,会输出响应数据,否则会输出错误信息。 需要注意的是,这里的 token 是从 localStorage 中获取的,你也可以从 cookie 或其他地方获取。同时,这个示例中还使用了 Promise.reject 方法,让错误信息可以继续向下传递,方便统一处理。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值