Skip to content

Commit 8065f84

Browse files
committed
Updates for flask-jwt-extended v4
1 parent 8a2a2bc commit 8065f84

File tree

3 files changed

+10
-17
lines changed

3 files changed

+10
-17
lines changed

src/server/api/jwt_ops.py

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,8 @@
66
create_access_token,
77
get_jwt_identity,
88
verify_jwt_in_request,
9-
get_jwt_claims,
9+
get_jwt
10+
1011
)
1112

1213
from app import app, jwt
@@ -16,28 +17,20 @@ def admin_required(fn):
1617
@wraps(fn)
1718
def wrapper(*args, **kwargs):
1819
verify_jwt_in_request()
19-
claims = get_jwt_claims()
20+
claims = get_jwt()
2021
if claims["role"] != "admin": # TODO could be multiple
2122
return jsonify(msg="Admins only!"), 403
2223
else:
2324
return fn(*args, **kwargs)
2425

2526
return wrapper
2627

27-
28-
@jwt.user_claims_loader
29-
def add_claims_to_access_token(accesslevel):
30-
""" Adds role k/v to token """
31-
return {"role": accesslevel}
32-
33-
3428
def create_token(username, accesslevel):
35-
""" Create a JWT *access* token for the specified user and role.
36-
Role is magically added by the user_claims_loader decorator
29+
""" Create a JWT *access* token for the specified user ('sub:') and role ('role:').
3730
"""
38-
# Identity can be any data that is json serializable
39-
new_token = create_access_token(identity=username)
40-
# add_claims_to_access_token(accesslevel)
31+
# Identity can be any data that is json serializable, we just use username
32+
addl_claims = {'role': accesslevel}
33+
new_token = create_access_token(identity=username, additional_claims=addl_claims)
4134
return jsonify(access_token=new_token)
4235

4336

src/server/api/user_api.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -145,15 +145,15 @@ def user_login_json():
145145

146146

147147
@user_api.route("/api/user/test_auth", methods=["GET"])
148-
@jwt_ops.jwt_required
148+
@jwt_ops.jwt_required()
149149
def user_test_auth():
150150
""" Liveness test, requires JWT """
151151
return jsonify(("OK from User Test - Auth @" + str(datetime.now())))
152152

153153

154154
# Logout is not strictly needed; client can just delete JWT, but good for logging
155155
@user_api.route("/api/user/logout", methods=["POST"])
156-
@jwt_ops.jwt_required
156+
@jwt_ops.jwt_required()
157157
def user_logout():
158158
username = request.form["username"] # TODO: Should be JSON all throughout
159159
# Log the request

src/server/requirements.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ xlrd==1.2.0 # currently used for xlsx, but we should consider adjusting code to
1010
openpyxl
1111
requests
1212
pytest
13-
flask-jwt-extended=3.25.0 # Breaking change in 4.0
13+
flask-jwt-extended=4.0.2
1414
alembic
1515
flask-cors
1616
phonenumbers

0 commit comments

Comments
 (0)