def post(self,request): # 接收参数 mobile = request.POST.get('mobile') password = request.POST.get('password') sms_code = request.POST.get('sms_code') # 校验参数 if not all([mobile,password,sms_code]): return http.HttpResponseForbidden('缺少必传参数') if not re.match(r'^1[3-9]\d{9}',mobile): return http.HttpResponseForbidden('请输入正确的手机号码') if not re.match(r'^[0-9a-zA-Z_]{8,20}',password): return http.HttpResponseForbidden('请输入8-20位的密码') # 验证短信验证码 redis_conn = get_redis_connection('sms_code') redis_sms_code = redis_conn.get('sms_%s' % mobile) if redis_sms_code is None: return render(request, 'oauth_callback.html', {'sms_code_errmsg': '无效的短信验证码'}) if sms_code.lower() != redis_sms_code.decode().lower(): return render(request, 'oauth_callback.html', {'sms_code_errmsg': '输入短信验证码有误'}) # 取出openid openid = request.POST.get('openid') # 解密 openid_dict = SecretOauth().loads(openid) openid = openid_dict.get('openid') # 判断该手机号是否存在 try: user = User.objects.get(mobile=mobile) except: # 如果不存在 则创建 user = User.objects.create_user(username=mobile,password=password,mobile=mobile) else: # 如果存在 则校验密码 if not user.check_password(password): return http.HttpResponseForbidden('手机号已经存在或密码错误') # 将用户和openid绑定 OAuthSinaUser.objects.create( uid=openid, user=user, ) # 状态保持 login(request,user) # 重定向到用户原先所在的位置页面 response = redirect(reverse('contents:index')) # 将用户名写入cookie response.set_cookie('username',user.username,max_age=3600*24*15) # 响应结果 return response
def get(self, request): # 1.接收参数 request.GET token = request.GET.get('token') # 解密 data_dict = SecretOauth().loads(token) user_id = data_dict.get('user_id') email = data_dict.get('email') # 2.校验 try: user = User.objects.get(id=user_id, email=email) except Exception as e: print(e) return http.HttpResponseForbidden('token无效的!') # 3. 修改 email_active user.email_active = True user.save() # 4. 返回 return redirect(reverse('users:info'))
def post(self, request): # 1.接收解析参数 mobile = request.POST.get('mobile') pwd = request.POST.get('password') sms_code = request.POST.get('sms_code') # 2. 校验---判断空, 正则---短信验证码 openid = request.POST.get('openid') loads_openid_dict = SecretOauth().loads(openid) openid = loads_openid_dict.get('openid') if not openid: return render(request, 'oauth_callback.html', {'openid_errmsg': "openid是无效的!"}) # 3.判断用户是否存在 try: user = User.objects.get(mobile=mobile) except User.DoesNotExist: # 5.不存在---创建新用户 user = User.objects.create_user(username=mobile, mobile=mobile, password=pwd) else: # 4.存在---校验密码 if not user.check_password(pwd): return render(request, 'oauth_callback.html', {'account_errmsg': "用户名或密码错误!"}) # 6. 绑定 openid try: qq_user = OAuthQQUser.objects.create(user=user, openid=openid) except Exception as e: return render(request, 'oauth_callback.html', {'qq_login_errmsg': "qq绑定失败!"}) # 7. 保持登录状态---设置cookie首页用户名----首页 # 1.保持登录状态 login(request, user) response = redirect(reverse('contents:index')) # 2. 设置cookie response.set_cookie('username', user.username, max_age=14 * 24 * 3600) # 3. 首页 return response
def post(self, request): # 接收openid openid_str = request.POST.get('openid') # 接收参数 mobile = request.POST.get('mobile') password = request.POST.get('password') sms_code = request.POST.get("sms_code") # 校验参数 # 解密openid openid_dict = SecretOauth().loads(openid_str) if openid_dict is None: return http.HttpResponseForbidden('授权信息无效,请重新授权') if not all([mobile, password, sms_code]): return http.HttpResponseForbidden('缺少必传参数') if not re.match(r'^1[3-9]\d{9}$', mobile): return http.HttpResponseForbidden('请输入正确的手机号码') if not re.match(r'^[0-9A-Za-z]{8,20}$', password): return http.HttpResponseForbidden('请输入8-20位的密码') # 验证短信验证码 from django_redis import get_redis_connection redis_conn = get_redis_connection('sms_code') redis_sms_code = redis_conn.get('sms_%s' % mobile) if redis_sms_code is None: return render(request, 'oauth_callback.html', {'sms_code_errmsg': '无效的短信验证码'}) if sms_code.lower() != redis_sms_code.decode().lower(): return render(request, 'oauth_callback.html', {'sms_code_errmsg': '输入短信验证码有误'}) # 取出openid openid = openid_dict.get('openid') # 处理: 初次授权 完成openid与user的绑定 # 1 判断手机号是否已经存在 try: user = User.objects.get(mobile=mobile) except: # 2 手机号不存在 就创建用户 user = User.objects.create_user(username=mobile, password=password, mobile=mobile) else: # 3 如果手机号存在的话 就校验密码 if not user.check_password(password): return http.HttpResponseForbidden('手机号已经存在或密码错误') # 绑定user和openid : 新建OAuthSinaUser对象 OAuthSinaUser.objects.create( user=user, uid=openid, ) # 状态保持 login(request, user) # 重定向到用户原先所在的位置页面 response = redirect(reverse('contents:index')) # 写入cooke response.set_cookie('username', user.username, max_age=3600 * 24 * 15) # 响应结果 return response