
什么是 REST API?
小貼士:SECRET_KEY
要保管好哦!它就像是你的保險箱密碼,千萬不能泄露。
有了token,當(dāng)然要驗證它是否有效:
def verify_token(token):
try:
# 驗證token
payload = jwt.decode(token, SECRET_KEY, algorithms=['HS256'])
return payload
except jwt.ExpiredSignatureError:
return "Token已過期!"
except jwt.InvalidTokenError:
return "無效的Token!"
# 測試驗證token
try:
result = verify_token(token)
print("解碼后的數(shù)據(jù):", result)
except Exception as e:
print("驗證失敗:", str(e))
下面是一個使用Flask框架的簡單示例:
from?flask?import?Flask,?jsonify,?request
from?functools?import?wraps
app?=?Flask(__name__)
#?驗證token的裝飾器
def?token_required(f):
????@wraps(f)
????def?decorated(*args,?**kwargs):
????????token?=?request.headers.get('Authorization')
????????if?not?token:
????????????return?jsonify({'message':?'缺少token!'}),?401
????????try:
????????????payload?=?verify_token(token)
????????????request.user?=?payload
????????except:
????????????return?jsonify({'message':?'token無效!'}),?401
????????return?f(*args,?**kwargs)
????return?decorated
#?登錄接口
@app.route('/login',?methods=['POST'])
def?login():
????#?這里簡化了登錄邏輯
????user_id?=?123
????token?=?create_token(user_id)
????return?jsonify({'token':?token})
#?需要驗證token的接口
@app.route('/protected')
@token_required
def?protected():
????return?jsonify({'message':?'你成功訪問了受保護的接口!'})
注意事項:
#?添加更多自定義信息
payload?=?{
????'user_id':?user_id,
????'username':?'python_lover',
????'role':?'admin',
????'exp':?datetime.datetime.utcnow()?+?datetime.timedelta(days=1)
}
PyJWT支持多種加密算法:
#?使用RS256算法(非對稱加密)
token?=?jwt.encode(payload,?private_key,?algorithm='RS256')
小伙伴們,今天的Python學(xué)習(xí)之旅就到這里啦!記得動手敲代碼,有問題隨時在評論區(qū)留言哦。JWT的使用場景非常廣泛,掌握了它,你就離成為后端高手更近一步啦!祝大家學(xué)習(xí)愉快,Python學(xué)習(xí)節(jié)節(jié)高!
文章轉(zhuǎn)自微信公眾號@黑發(fā)工程