Esempio n. 1
0
    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
Esempio n. 2
0
    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'))
Esempio n. 3
0
    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
Esempio n. 4
0
    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