Advertisement
Guest User

Untitled

a guest
Nov 12th, 2018
130
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.70 KB | None | 0 0
  1. Doku: https://flask-jwt-extended.readthedocs.io/en/latest/index.html
  2. Github: https://github.com/vimalloc/flask-jwt-extended
  3.  
  4. from flask import Flask, jsonify, request
  5. from flask_jwt_extended import (
  6. JWTManager, jwt_required, create_access_token,
  7. get_jwt_identity
  8. )
  9. from werkzeug.security import safe_str_cmp
  10.  
  11. class User(object):
  12. def __init__(self, id, username, password, role):
  13. self.id = id
  14. self.username = username
  15. self.password = password
  16. self.role = role
  17. def __str__(self):
  18. return "User(id='%s',role='%s')" % (self.id, self.role)
  19.  
  20. users = [
  21. User(1, 'user1', 'abcxyz', 'user'),
  22. User(2, 'user2', 'abcxyz', 'admin'),
  23. ]
  24.  
  25. username_table = {u.username: u for u in users}
  26.  
  27. app = Flask(__name__)
  28. app.debug = True
  29. app.config['SECRET_KEY'] = 'super-secret'
  30.  
  31. jwt = JWTManager(app)
  32.  
  33. @app.route('/auth/login', methods=['POST'])
  34. def login():
  35. if not request.is_json:
  36. return jsonify({"msg": "No JSON in request"}), 400
  37. username = request.json.get('username', None)
  38. password = request.json.get('password', None)
  39. user = username_table.get(username, None)
  40. if user and safe_str_cmp(user.password.encode('utf-8'), password.encode('utf-8')):
  41. access_token = create_access_token(identity={"username":user.username, "role":user.role})
  42. return jsonify(access_token=access_token, role=user.role), 200
  43. return "Unauthorized", 404
  44.  
  45. @app.route('/protected')
  46. @jwt_required
  47. def protected():
  48. current_identity = get_jwt_identity()
  49. return '%s' % current_identity
  50.  
  51. @app.route('/admin')
  52. @jwt_required
  53. def admin():
  54. current_identity = get_jwt_identity()
  55. if current_identity['role'] != "admin":
  56. return "Forbidden", 403
  57. return "You are admin!"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement