def hmac(payload, private_key): '''Generate a decryptable signature on the server side that the client can analzye. Server generated HMAC signatures aren't timed. ''' payload = organize_payload(payload) t = Token(secret_key=private_key) return t.dumps(payload)
def confirm(self, token): t = Token(current_app.config['SECRET_KEY']) try: data = t.loads(token.encode('utf-8')) except Exception: return False if data.get('token') != self.id: return False self.confirmed = True db.session.add(self) return True
def change_email(self, token): t = Token(current_app.config['SECRET_KEY']) try: data = t.loads(token.encode('utf-8')) except Exception: return False if data.get('change_email') != self.id: return False if data.ger('new_email') is None: return False self.email = data.ger('new_email') db.session.add(self) return True
def reset_password(self, new_password): t = Token(current_app.config['SECRET_KEY']) try: data = t.loads(new_password.encode('utf-8')) except Exception: return False user = User.query.get(data.get('reset')) if user is None: return False user.password = new_password db.session.add(user) return True
def post(self, request): if request.is_ajax(): username = request.POST.get('userName') password = request.POST.get('passWords') sex = request.POST.get('sex') phone = request.POST.get('phone') code = request.POST.get('code') email = request.POST.get('email') rank = request.POST.get('rank') # 超管验证 s_user = request.POST.get('s_user') s_pwd = request.POST.get('s_pwd') if all([s_user, s_pwd]): superuser = auth.authenticate(username=s_user, password=s_pwd, is_superuser=1) if superuser: return JsonResponse({'err': 'yz_200'}) else: return JsonResponse({'err': 'yz_101'}) # 信息加密,有效期30分钟 encipher = Token(settings.SECRET_KEY, 1800) # bytes类型 token = encipher.dumps(username) # 转字符串 token = token.decode() phone_code = cache.get(phone) if phone_code == code: send_email.delay(email, username, token) redis_user = { 'username': username, 'password': password, 'email': email, 'phone': phone, 'sex': sex, 'rank': rank } # 缓存在redis中,30分钟后失效 caches['redis_user'].set(username, redis_user, 1800) return JsonResponse({'err': '200'}) else: return JsonResponse({'err': '101'}) return render(request, 'users/register.html')
def active(request, token): if request.method == 'GET': try: encipher = Token(settings.SECRET_KEY, 1800) # 解密 info = encipher.loads(token) user = caches['redis_user'].get(info) # 激活账号后存入数据库用户表 User.objects.create_user(username=user['username'], password=user['password'], email=user['email'], phone=user['phone'], sex=user['sex'], is_active=1, is_rank=user['rank']) return render(request, 'users/active.html') except Exception: return HttpResponse( "<h3>该链接已经过期,请重新<a href='http://127.0.0.1:8000/users/register/'>注册</a></h3>" )
def PrivateKey(id): '''Generate a reusable private key for the user.''' t = Token(secret_key=current_app.config['SECRET_KEY']) return t.dumps({'id':id})
def generate_email_change_token(self, new_email, expiretion): token = Token(current_app.config['SECRET_KEY']) return token.dumps({ 'change_email': self.id, 'new_email': new_email }).decode('utf-8')
def generate_reset_token(self, expiretion=3600): token = Token(current_app.config['SECRET_KEY']) return token.dumps({'reset': self.id}).decode('utf-8')
def generate_confimation_token(self, expiretion=3600): token = Token(current_app.config['SECRET_KEY'], expiretion) return token.dumps({'token': self.id}).decode('utf-8')