伸缩自如的Flask [day4] JWT

好的,你很辛苦的写了很多API function,但是你却不希望闲杂人等没事就call一下你的API功能。
也许,你该试试JWT了。JWT的主要功能是进行验证、授权、资讯交换,你也可以搜寻一下JWT介绍以及他与session之间的比较。

https://github.com/wilsonsujames/jwt_test/blob/main/app.py

pip install Flask-JWT-Extended
from flask_jwt_extended import create_access_token, jwt_required,set_access_cookies,unset_jwt_cookies,JWTManager
from flask import Flask,render_template,jsonify, request
import os

jwt = JWTManager()

app = Flask(__name__)
jwt.init_app(app)
app.config['JWT_SECRET_KEY'] = os.urandom(24)
app.config['JWT_TOKEN_LOCATION'] = ['headers','query_string']
app.config['JWT_BLACKLIST_ENABLED'] = True
app.config['JWT_BLACKLIST_TOKEN_CHECKS'] = ['access']

@app.route('/')
def index():
    
    AccountName=request.form.get('AccountName')
    access_token = create_access_token(identity=AccountName)
    
    return jsonify({'login_status':'seccess','jwt':access_token})

@app.route('/helloJwt')
@jwt_required()
def jwtTest():
    return 'jwt test success.'


if __name__ == "__main__":
    app.run(debug=True,threaded=True,port=8888)    

好的,来到程序码来看最基本的运用,执行程序到根路由,你可以用postman也可以用requests套件来夹带JWT call api,但是我们这里使用更简单的方式,直接在浏览器上贴上:
http://127.0.0.1:5000/helloJwt?jwt= + 你从根路由获得的JWT

没错,大概就是长成这样:
http://127.0.0.1:5000/helloJwt?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJmcmVzaCI6ZmFsc2UsImlhdCI6MTYyMDY0ODIzMywianRpIjoiNTBkZDMwNTEtYTRmMS00Yjc0LTk4Y2YtYmI4OGI2MjlmOGFhIiwidHlwZSI6ImFjY2VzcyIsInN1YiI6bnVsbCwibmJmIjoxNjIwNjQ4MjMzLCJleHAiOjE2MjA2NDkxMzN9.4ttjiD7sDh5PRtg6PvAcDdhJy3dLJCA1ghCVBYhydr0

只是我的JWT跟你的长得不一样而已,好的现在你能让只有知道JWT的人,才能使用jwtTest这个function了。
但是假设你想要夹带附加资讯呢?
https://flask-jwt-extended.readthedocs.io/en/stable/add_custom_data_claims/

additional_claims = {"aud": "some_audience", "foo": "bar"}
access_token = create_access_token(username, additional_claims=additional_claims)

可以发现在additional_claims的参数我们夹带了额外资讯。

@app.route("/protected", methods=["GET"])
@jwt_required()
def protected():
    claims = get_jwt()
    return jsonify(foo=claims["foo"])

在jwt_required的路由藉由get_jwt()来获取额外资讯。

注意
未来的API如果为POST的方法:

@member_blueprint.route('/member_login', methods=["POST"])

请乖乖地使用requests或是postman,来顺利地call api。

第四天就到这里吧,刚好九点了。


<<:  {CMoney战斗营} 的第十一周 #两天转换程序语言

>>:  CMoney菁英软件工程师战斗营前端课程_Week 11

dos指令 开启IIS 管理员

C:\Windows\System32\inetsrv InetMgr.exe ...

Day1 工业控制系统与普渡模型

工业控制系统 Industrial Control System 简称 ICS = 电脑与工业设备...

第 08 天 再接再厉坚持不懈( leetcode 300 347 )

https://leetcode.com/problems/longest-increasing-...

Day 05 | 资料绑定(一)

今天的内容是页面前後端资料传递,这个部分跟前面相比来说简单许多也比较直觉话。如果以前有写过 Vue....

# Day34 Golang 操作CSV档案

Day34 Golang 操作CSV CVS 是以逗号,及换行\n分隔的资料格式, 从CSV的英文(...