44from flask_jwt_extended import (
55 jwt_required , JWTManager , jwt_refresh_token_required , create_access_token ,
66 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
88)
99
1010def _get_cookie_from_response (response , cookie_name ):
@@ -46,6 +46,18 @@ def delete_tokens():
4646 unset_jwt_cookies (resp )
4747 return resp
4848
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+
4961 @app .route ('/protected' , methods = ['GET' ])
5062 @jwt_required
5163 def protected ():
@@ -75,12 +87,12 @@ def optional_post_protected():
7587
7688
7789@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' )
8092])
8193def test_jwt_refresh_required_with_cookies (app , options ):
8294 test_client = app .test_client ()
83- auth_url , cookie_name , protected_url = options
95+ auth_url , cookie_name , protected_url , delete_url = options
8496
8597 # Test without cookies
8698 response = test_client .get (protected_url )
@@ -94,7 +106,17 @@ def test_jwt_refresh_required_with_cookies(app, options):
94106 assert response .get_json () == {'foo' : 'bar' }
95107
96108 # 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" )
98120 response = test_client .get (protected_url )
99121 assert response .status_code == 401
100122 assert response .get_json () == {'msg' : 'Missing cookie "{}"' .format (cookie_name )}
@@ -217,6 +239,10 @@ def test_setting_cookies_wihout_cookies_enabled(app):
217239 assert response .status_code == 500
218240 response = test_client .get ('/delete_tokens' )
219241 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
220246
221247
222248def test_default_cookie_options (app ):
0 commit comments