Skip to content

Commit a0f206e

Browse files
author
Landon Gilbert-Bland
committed
Fix error messaging for edge case with current_user
1 parent ef3da3c commit a0f206e

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

flask_jwt_extended/utils.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ def get_jwt():
2222
decoded_jwt = getattr(_request_ctx_stack.top, "jwt", None)
2323
if decoded_jwt is None:
2424
raise RuntimeError(
25-
"You must call `@jwt_required()` or `verify_jwt_in_request` "
25+
"You must call `@jwt_required()` or `verify_jwt_in_request()` "
2626
"before using this method"
2727
)
2828
return decoded_jwt
@@ -40,7 +40,7 @@ def get_jwt_header():
4040
decoded_header = getattr(_request_ctx_stack.top, "jwt_header", None)
4141
if decoded_header is None:
4242
raise RuntimeError(
43-
"You must call `@jwt_required()` or `verify_jwt_in_request` "
43+
"You must call `@jwt_required()` or `verify_jwt_in_request()` "
4444
"before using this method"
4545
)
4646
return decoded_header
@@ -87,6 +87,7 @@ def get_current_user():
8787
:return:
8888
The current user object for the JWT in the current request
8989
"""
90+
get_jwt() # Raise an error if not in a decorated context
9091
jwt_user_dict = getattr(_request_ctx_stack.top, "jwt_user", None)
9192
if jwt_user_dict is None:
9293
raise RuntimeError(

tests/test_user_lookup.py

Lines changed: 18 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,16 +20,32 @@ def app():
2020
@app.route("/get_user1", methods=["GET"])
2121
@jwt_required()
2222
def get_user1():
23-
return jsonify(foo=get_current_user()["username"])
23+
try:
24+
return jsonify(foo=get_current_user()["username"])
25+
except RuntimeError as e:
26+
return jsonify(error=str(e))
2427

2528
@app.route("/get_user2", methods=["GET"])
2629
@jwt_required()
2730
def get_user2():
28-
return jsonify(foo=current_user["username"])
31+
try:
32+
return jsonify(foo=current_user["username"])
33+
except RuntimeError as e:
34+
return jsonify(error=str(e))
2935

3036
return app
3137

3238

39+
@pytest.mark.parametrize("url", ["/get_user1", "/get_user2"])
40+
def test_no_user_lookup_loader_specified(app, url):
41+
test_client = app.test_client()
42+
with app.test_request_context():
43+
access_token = create_access_token("username")
44+
45+
response = test_client.get(url, headers=make_headers(access_token))
46+
assert "@jwt.user_lookup_loader" in response.get_json()["error"]
47+
48+
3349
@pytest.mark.parametrize("url", ["/get_user1", "/get_user2"])
3450
def test_load_valid_user(app, url):
3551
jwt = get_jwt_manager(app)

0 commit comments

Comments
 (0)