4
4
from flask_jwt_extended import (
5
5
jwt_required , JWTManager , jwt_refresh_token_required , create_access_token ,
6
6
create_refresh_token , set_access_cookies , set_refresh_cookies ,
7
- unset_jwt_cookies , jwt_optional
7
+ unset_jwt_cookies , unset_access_cookies , unset_refresh_cookies , jwt_optional
8
8
)
9
9
10
10
def _get_cookie_from_response (response , cookie_name ):
@@ -46,6 +46,18 @@ def delete_tokens():
46
46
unset_jwt_cookies (resp )
47
47
return resp
48
48
49
+ @app .route ('/delete_access_tokens' , methods = ['GET' ])
50
+ def delete_access_tokens ():
51
+ resp = jsonify (access_revoked = True )
52
+ unset_access_cookies (resp )
53
+ return resp
54
+
55
+ @app .route ('/delete_refresh_tokens' , methods = ['GET' ])
56
+ def delete_refresh_tokens ():
57
+ resp = jsonify (refresh_revoked = True )
58
+ unset_refresh_cookies (resp )
59
+ return resp
60
+
49
61
@app .route ('/protected' , methods = ['GET' ])
50
62
@jwt_required
51
63
def protected ():
@@ -75,12 +87,12 @@ def optional_post_protected():
75
87
76
88
77
89
@pytest .mark .parametrize ("options" , [
78
- ('/refresh_token' , 'refresh_token_cookie' , '/refresh_protected' ),
79
- ('/access_token' , 'access_token_cookie' , '/protected' )
90
+ ('/refresh_token' , 'refresh_token_cookie' , '/refresh_protected' , '/delete_refresh_tokens' ),
91
+ ('/access_token' , 'access_token_cookie' , '/protected' , '/delete_access_tokens' )
80
92
])
81
93
def test_jwt_refresh_required_with_cookies (app , options ):
82
94
test_client = app .test_client ()
83
- auth_url , cookie_name , protected_url = options
95
+ auth_url , cookie_name , protected_url , delete_url = options
84
96
85
97
# Test without cookies
86
98
response = test_client .get (protected_url )
@@ -94,7 +106,17 @@ def test_jwt_refresh_required_with_cookies(app, options):
94
106
assert response .get_json () == {'foo' : 'bar' }
95
107
96
108
# Test after issuing a 'logout' to delete the cookies
97
- test_client .get ('/delete_tokens' )
109
+ test_client .get (delete_url )
110
+ response = test_client .get (protected_url )
111
+ assert response .status_code == 401
112
+ assert response .get_json () == {'msg' : 'Missing cookie "{}"' .format (cookie_name )}
113
+
114
+ # log back in once more to test that clearing all tokens works
115
+ test_client .get (auth_url )
116
+ response = test_client .get (protected_url )
117
+ assert response .status_code == 200
118
+
119
+ test_client .get ("/delete_tokens" )
98
120
response = test_client .get (protected_url )
99
121
assert response .status_code == 401
100
122
assert response .get_json () == {'msg' : 'Missing cookie "{}"' .format (cookie_name )}
@@ -217,6 +239,10 @@ def test_setting_cookies_wihout_cookies_enabled(app):
217
239
assert response .status_code == 500
218
240
response = test_client .get ('/delete_tokens' )
219
241
assert response .status_code == 500
242
+ response = test_client .get ('/delete_access_tokens' )
243
+ assert response .status_code == 500
244
+ response = test_client .get ('/delete_refresh_tokens' )
245
+ assert response .status_code == 500
220
246
221
247
222
248
def test_default_cookie_options (app ):
0 commit comments