11from flask_restful import Resource , reqparse
22from werkzeug .security import safe_str_cmp
3- from flask_jwt_extended import create_access_token , create_refresh_token , jwt_refresh_token_required , get_jwt_identity
3+ from flask_jwt_extended import (
4+ create_access_token ,
5+ create_refresh_token ,
6+ jwt_refresh_token_required ,
7+ get_jwt_identity ,
8+ get_raw_jwt ,
9+ jwt_required
10+ )
411from models .user import UserModel
12+ from blacklist import BLACKLIST
513
14+ _user_parser = reqparse .RequestParser ()
15+ _user_parser .add_argument ('username' ,
16+ type = str ,
17+ required = True ,
18+ help = "This field cannot be blank."
19+ )
20+ _user_parser .add_argument ('password' ,
21+ type = str ,
22+ required = True ,
23+ help = "This field cannot be blank."
24+ )
625
7- class UserRegister (Resource ):
8- parser = reqparse .RequestParser ()
9- parser .add_argument ('username' ,
10- type = str ,
11- required = True ,
12- help = "This field cannot be blank."
13- )
14- parser .add_argument ('password' ,
15- type = str ,
16- required = True ,
17- help = "This field cannot be blank."
18- )
1926
27+ class UserRegister (Resource ):
2028 def post (self ):
21- data = self . parser .parse_args ()
29+ data = _user_parser .parse_args ()
2230
2331 if UserModel .find_by_username (data ['username' ]):
2432 return {"message" : "A user with that username already exists" }, 400
@@ -30,20 +38,8 @@ def post(self):
3038
3139
3240class UserLogin (Resource ):
33- parser = reqparse .RequestParser ()
34- parser .add_argument ('username' ,
35- type = str ,
36- required = True ,
37- help = "This field cannot be blank."
38- )
39- parser .add_argument ('password' ,
40- type = str ,
41- required = True ,
42- help = "This field cannot be blank."
43- )
44-
4541 def post (self ):
46- data = self . parser .parse_args ()
42+ data = _user_parser .parse_args ()
4743
4844 user = UserModel .find_by_username (data ['username' ])
4945
@@ -58,6 +54,14 @@ def post(self):
5854 return {"message" : "Invalid Credentials!" }, 401
5955
6056
57+ class UserLogout (Resource ):
58+ @jwt_required
59+ def post (self ):
60+ jti = get_raw_jwt ()['jti' ]
61+ BLACKLIST .add (jti )
62+ return {"message" : "Successfully logged out" }, 200
63+
64+
6165class User (Resource ):
6266 """
6367 This resource can be useful when testing our Flask app. We may not want to expose it to public users, but for the
0 commit comments