Advertisement
savie001

flask hash password

Mar 7th, 2019
711
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.80 KB | None | 0 0
  1. Challenge Task 3 of 3
  2. Almost done!
  3.  
  4. Now I need you to update the create_user method so that it sets the User instance's password using the User.hash_password method you just created. You should see the TODO for where to add this.
  5.  
  6. Bummer: Didn't get back a properly hashed password; Couldn't create a user
  7.  
  8. import datetime
  9.  
  10. from argon2 import PasswordHasher
  11. from itsdangerous import (TimedJSONWebSignatureSerializer as Serializer,
  12. BadSignature, SignatureExpired)
  13. from peewee import *
  14.  
  15. DATABASE = SqliteDatabase('courses.sqlite')
  16. HASHER = PasswordHasher()
  17.  
  18.  
  19. class User(Model):
  20. username = CharField(unique=True)
  21. email = CharField(unique=True)
  22. password = CharField()
  23.  
  24. class Meta:
  25. database = DATABASE
  26.  
  27. @classmethod
  28. def create_user(cls, username, email, password, **kwargs):
  29. email = email.lower()
  30. try:
  31. cls.select().where(
  32. (cls.email == email) | (cls.username**username)
  33. ).get()
  34. except cls.DoesNotExist:
  35. user = cls(username=username, email=email)
  36. user.password = user.set_password(password)
  37. cls.create(email=email, password=generate_password_hash(password))
  38. user.save()
  39. return user
  40. else:
  41. raise Exception("User with that email or username already exists.")
  42.  
  43.  
  44. @staticmethod
  45. def set_password(password):
  46. return HASHER.hash(password)
  47.  
  48. @staticmethod
  49. def hash_password(password):
  50. return HASHER.hash(password)
  51.  
  52. def verify_password(self, password):
  53. return HASHER.verify(self.password, password)
  54.  
  55. def generate_auth_token(self, expires=3600):
  56. serializer = Serializer(config.SECRET_KEY, expires_in=expires)
  57. return serializer.dumps({'id': self.id})
  58.  
  59. @staticmethod
  60. def verify_auth_token(token):
  61. serializer = Serializer(config.SECRET_KEY)
  62. try:
  63. data = serializer.loads(token)
  64. except (SignatureExpired, BadSignature):
  65. return None
  66. else:
  67. user = User.get(User.id == data['id'])
  68. return user
  69.  
  70. class Course(Model):
  71. title = CharField()
  72. url = CharField(unique=True)
  73. created_at = DateTimeField(default=datetime.datetime.now)
  74.  
  75. class Meta:
  76. database = DATABASE
  77.  
  78.  
  79. class Review(Model):
  80. course = ForeignKeyField(Course, related_name='review_set')
  81. rating = IntegerField()
  82. comment = TextField(default='')
  83. created_at = DateTimeField(default=datetime.datetime.now)
  84. created_by = ForeignKeyField(User, related_name='review_set')
  85.  
  86. class Meta:
  87. database = DATABASE
  88.  
  89.  
  90. def initialize():
  91. DATABASE.connect()
  92. DATABASE.create_tables([User, Course, Review], safe=True)
  93. DATABASE.close()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement