def generate_sms_access_token(self): serializer = TJSerializer( secret_key=settings.SECRET_KEY, expires_in=constants.SET_PASSWORD_TOKEN_EXPIRES) data = {'mobile': self.mobile} token = serializer.dumps(data) # dumps返回的是byte类型,需要decode一下 return token.decode()
def generate_email_verify_url(self): serializer = TJSerializer( secret_key=settings.SECRET_KEY, expires_in=constants.EMAIL_VERIFY_TOKEN_EXPIRES) data = {'user_id': self.id, 'email': self.email} token = serializer.dumps(data) verify_url = 'http://www.meiduo.site:8080/success_verify_email.html?token=' + token.decode( ) return verify_url
def generate_email_verify_url(self): """生成邮箱激活链接""" # 创建加密序列化器 serializer = TJSerializer(settings.SECRET_KEY, 3600 * 24) # 调用序列化器对象dumps方法进行加密 data = {'user_id': self.id, 'email': self.email} token = serializer.dumps(data).decode() # 拼接激活url return 'http://www.meiduo.site:8080/success_verify_email.html?token=' + token
def check_sms_access_token(access_token): serializer = TJSerializer( secret_key=settings.SECRET_KEY, expires_in=constants.SET_PASSWORD_TOKEN_EXPIRES) try: data = serializer.load(access_token) except BadData: return None else: mobile = data.get('mobile') return mobile
def password_reset(self, token, new_password): s = TJSerializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except: return False if self.id != data.get('reset'): return False self.password = new_password db.session.add(self) db.session.commit() return True
def email_changed(self, token): s = TJSerializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except: return False if self.id != data.get('user_id'): return False self.email = data.get('new_email') db.session.add(self) db.session.commit() return True
def confirmed(self, token): if self.is_confirmed: return True s = TJSerializer(current_app.config['SECRET_KEY']) try: data = s.loads(token) except: return False if data.get('confirm') != self.id: return False self.is_confirmed = True db.session.add(self) db.session.commit() return True
def check_email_verify_token(token): serializer = TJSerializer( secret_key=settings.SECRET_KEY, expires_in=constants.EMAIL_VERIFY_TOKEN_EXPIRES) try: data = serializer.loads(token) except BadData: return False else: email = data.get('email') user_id = data.get('user_id') # 查询用户并更新字段的两种方式 # user = User.objects.get(id=user_id, email=email) # user.email_active = True # user.save() User.objects.filter(id=user_id, email=email).update(email_active=True) return True
def check_verify_email_token(token): """对token解密并查询对应的user""" #创建序列话器对象 serializer = TJSerializer(settings.SECRET_KEY, 3600 * 24) # 调用loads方法进行解密 解密的时如果过期的话或者数据有问题是会报异常的 try: data = serializer.loads(token) except BadData: return None else: id = data.get('user_id') email = data.get('email') try: user = User.objects.get(id=id, email=email) except User.DoesNotExist: return None else: return user
def generate_reset_password_token(self, expiration=1800): s = TJSerializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'reset': self.id})
def generate_new_email_token(self, new_email, expiration=1800): s = TJSerializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'user_id': self.id, 'new_email': new_email})
def generate_confirmation_token(self, expiration=1800): s = TJSerializer(current_app.config['SECRET_KEY'], expiration) return s.dumps({'confirm': self.id})