首页 > 其他分享 >flask中使用pyjwt

flask中使用pyjwt

时间:2023-10-04 12:25:01浏览次数:40  
标签:__ flask request app jwt token 使用 pyjwt

**pyjwt使用教程: **

https://pyjwt.readthedocs.io/en/stable/

使用案例

import datetime

from flask import Flask, request

# 导入pyjwt
import jwt

app = Flask(__name__)
app.secret_key = "456sdcjhkgahsiugfijbxcad6745#@#@!%^&&."


@app.route('/login')
def login():

    # 设置载荷信息
    payload = {
        "userid": 888,
        # 过期时间要用0时区的。
        "exp": datetime.datetime.utcnow()+datetime.timedelta(days=1)
    }
    
    # 加密并获取token
    token = jwt.encode(payload, key=app.secret_key)

    return "token: %s" % token


@app.route('/usercenter')
def usercenter():
    # 直接通过请求头拿(会携带类型,比如: Bearer + TOKEN)
    # 此时就需要split切分后才能进行jwt的decode校验
    print(request.headers.get("Authorization"))
    
    # 我们可以通过request的authorization属性直接拿到token,里面帮我们按token和type两个属性切分了
    print(request.authorization.token) # 具体的token
    print(request.authorization.type) # Bearer 或者 JWT
    # 解码必须直接提供token,不能带有Bearer类型字符串
    #(这样不能解码的!) Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOjg4OCwiZXhwIjoxNjg0MTMyNjgxfQ.KWWBcSEBxF2uo7ZYWIX69ZuGyeBi-eiV8doRt1bh0z4
    #(只能这样!) eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyaWQiOjg4OCwiZXhwIjoxNjg0MTMyNjgxfQ.KWWBcSEBxF2uo7ZYWIX69ZuGyeBi-eiV8doRt1bh0z4
    # 解码后得到playload,注意:解码的时候必须告诉他用什么算法

    try:
        jwt_decode = jwt.decode(request.authorization.token, key=app.secret_key, algorithms=["HS256"])

        print(jwt_decode.get("userid"))
        
        return jwt_decode
    except Exception as e:
        print(e)
        return "token校验出错!"


if __name__ == '__main__':
    app.run(debug=True)

标签:__,flask,request,app,jwt,token,使用,pyjwt
From: https://www.cnblogs.com/juelian/p/17742120.html

相关文章

  • flask的cookie和session会话保持
    Cookie获取请求cookie通过请求对象中的cookies属性可以获取cookie。实例:fromflaskimportFlask,[email protected]("/user-info",methods=["get","post"])defuserinfo():username=request.cookies.get("username")returnf"you......
  • 模板渲染的使用
    现在一般都是前后端分离开发了,模板相对较少使用。和django一样,flask也是支持模板渲染的。flask中默认使用的是jinjia2模板渲染语言。#template_folder:指定模板文件查找的目录(默认就是templates)app=Flask(__name__,template_folder="templates")使用模板渲染返回,前面r......
  • flask请求钩子(就是django的中间件)
    flask中的请求钩子就是域django的中间件类似,作用都是用于在请求前、后、响应前、后进行一些hook操作。请求钩子装饰器@app.before_request#请求前会调用,一般可以用来做权限校验。@app.brefore_first_request#只在第一次请求的时候调用,可以做一些init初始化的动作。......
  • flask统一异常捕获(作用:统一捕获指定的异常并返回)
    flask中可以使用装饰器errorhandler来对指定的异常、状态码等统一捕获并处理。对指定的状态码进行统一捕获@app.errorhandler(404)#参数e是异常的详细信息的对象,必须要有一个参数接收异常对象。defpagenotfound(e):#比如可以重定向到统一的404静态页面中。#不过......
  • flask自带的异常抛出函数abort
    flask中有一个abort函数,可以用于快捷的抛出异常,但是只能抛出标准的HTTP状态码,不能乱设置HTPP状态码,比如666、777这种。[email protected]("/user")defuser():abort(404)......
  • flask应用程序配置
    flask中配置app的配置有几种方式,不同的场景适合用不同的方式。配置定义方式如下:(注意:这几种方式都时可以混用的)直接调用app.config来设置。app.config["SECRET_KEY"]="sjhiq1y198798su656s#$#$%"从类对象中加载配置文件(优先级高于app.config直接设置)app.config.from_ob......
  • flask蓝图(这玩意就是django的子应用)
    蓝图的概念类似django的子应用,作用就是分模块开发,有关联的都放在一起。蓝图的创建步骤:新建一个包(一个包就是一个模块、等同于一个子应用)在包的__init__.py中创建蓝图对象。蓝图对象所有的参数和功能与Flask()对象类似。见:user下的__init__.py和views.py在app中注册蓝......
  • flask上下文、g变量、current_app
    在flask中的上下文分为两种:请求上下文(requestcontext)也就是和请求相关的上下文,记录一些请求相关的数据。包含:1、request请求对象2、session会话应用上下文(appcontext)记录一些和flask的应用(app=Flask(name))的上下文数据,主要包含:**1、current_app**在项目其它......
  • django-celery-results - 使用 Django ORM/Cache 作为结果后端
    https://docs.celeryq.dev/en/stable/django/first-steps-with-django.html#django-celery-results-using-the-django-orm-cache-as-a-result-backend这个一般自己设置一下result_backend也行,要用django-celery-results也是一个选择。......
  • django-celery-beat插件使用
    该插件从Django管理界面管理celery的定期任务,您可以在其中动态****创建、编辑和删除定期任务以及它们的运行频率。django-celery-beat提供了几种添加定时或周期性任务的方式,预先在在settings.py中添加好定时任务。通过Djangoadmin后台动态添加。(实际上就是操作model模型类)......