环境:python3.6+
模块:flask、jwt
目的:实现用于登录并返回token令牌,用于后续的接口权限验证。
前言介绍:
jwt(JSON Web Tokens),在用户认证当中常用的方式,在如今的前后端分离项目当中应用广泛,提高了后端代码的简洁和效能。
传统token和jwt区别
-
传统token:服务端会对登录成功的用户生成一个随机token返回,同时也会在本地保留对应的token(如在数据库中存入:token、用户名、过期时间等),当用户再次访问时,会携带之前的token给服务端进行校验,服务端则通过与本地保留的token进行对比,若寻找到符合条件的token数据,则校验成功
-
jwt验证:服务端会对登录成功的用户生成一个随机token返回,但并不会在服务端本地保留(这是jwt和传统token最大的区别),而当用户再次访问时,服务端会基于jwt对token进行校验和解码(由于jwt是基于base64url编码,因此是可以反向解码的,建议不要在token中存放敏感数据)
JWT 的官方文档: JSON Web Token Introduction - jwt.io
代码如下:
from flask import g, request, Flask, current_app, jsonify
import jwt
from jwt import exceptions
import functools
import datetime
app = Flask(__name__)
# 处理中文编码
app.config['JSON_AS_ASCII'] = False
# 跨域支持
def after_request(resp):
resp.headers['Access