伸缩自如的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,JWTManagerfrom flask import Flask,render_template,jsonify, requestimport osjwt = 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'] = Trueapp.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。

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

[day 1] 开场白[day 2] blue_print[day 3] Factory mode[day 4] JWT token[day 5] session[day 6] Jinja[day 7] Post data with Form tag[day 8] ajax with jquery[day 9] request[day 10] 将资料写进DB(pymongo)[day 11] log with mongoDB[day 12] Sql Database[day 13] 档案上传[day 14] 档案下载 及 其他传值方法[day 15] boostrap 4.6[day 16] API[day 17] Docker image化--安装篇[day 18] Docker image化--运行篇[day 19] Nginx[day 20] Docker compose[day 21] Nginx with https[day 22] pythonanywhere 部署[day 23] GCP app engine (介绍)[day 24] GCP app engine (deploy)[day 25] Flask with web cam[day 26] Flask with ML[day 27] Supervisor[day 28] Flask-Mail[day 29] Line Messaging API[day 30] 结语

关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章