Пример #1
0
        def _checklogin(request, *args, **kwargs):
            if request.user.is_active:
                # The user is valid. Continue to the admin page.
                return view_func(request, *args, **kwargs)

            code = request.GET.get('code')
            user_agent = request.META.get('HTTP_USER_AGENT')
            if not user_agent or user_agent.find('MicroMessenger') < 0:
                return HttpResponseRedirect(none_wxauth_url)

            if not code:
                openid, unionid = options.get_cookie_openid(
                    request.COOKIES, wxpub_appid)
                if not options.valid_openid(unionid):
                    params = {
                        'appid': wxpub_appid,
                        'redirect_uri':
                        request.build_absolute_uri().split('#')[0],
                        'response_type': 'code',
                        'scope': 'snsapi_userinfo',
                        'state': '135'
                    }
                    redirect_url = options.gen_weixin_redirect_url(params)
                    return redirect(redirect_url)

            user = authenticate(request=request,
                                auth_code=code,
                                wxpub_appid=wxpub_appid)
            if not user or user.is_anonymous:
                return HttpResponseRedirect(none_wxauth_url)

            auth_login(request, user)
            return view_func(request, *args, **kwargs)
Пример #2
0
        def _checklogin(request, *args, **kwargs):
            if request.user.is_active:
                # The user is valid. Continue to the admin page.
                return view_func(request, *args, **kwargs)

            code = request.GET.get('code')
            user_agent = request.META.get('HTTP_USER_AGENT')
            if not user_agent or user_agent.find('MicroMessenger') < 0:
                return HttpResponseRedirect(redirecto)

            if not code:
                params = {
                    'appid': settings.WX_PUB_APPID,
                    'redirect_uri': request.build_absolute_uri().split('#')[0],
                    'response_type': 'code',
                    'scope': 'snsapi_base',
                    'state': '135'
                }
                redirect_url = options.gen_weixin_redirect_url(params)
                return HttpResponseRedirect(redirect_url)

            else:
                user = authenticate(request=request,
                                    auth_code=code,
                                    wxpub_appid=settings.WX_PUB_APPID)
                if not user or user.is_anonymous:
                    return HttpResponseRedirect(redirecto)

                auth_login(request, user)
                return view_func(request, *args, **kwargs)
Пример #3
0
    def customer_login(self, request):
        """验证用户登录"""
        username = request.data.get('username')
        password = request.data.get('password')
        next_url = request.data.get('next', '/index.html')
        if not username or not password:
            return Response({"code": 1, "message": u"用户名和密码不全呢!", 'next': ''})

        customers = Customer.objects.filter(mobile=username).exclude(status=Customer.DELETE)
        if customers.count() == 1:
            # 若是微信授权创建的账户,django user的username不是手机号。
            username = customers[0].user.username

        user = authenticate(username=username, password=password)
        if not user or user.is_anonymous:
            return Response({"code": 2, "message": u"用户名或密码错误呢!", 'next': ''})
        login(request, user)

        if in_weixin(request) and customers.count() == 1 and not customers[0].is_wxauth():
            params = {
                'appid': settings.WX_PUB_APPID,
                'response_type': 'code',
                'scope': 'snsapi_base',
                'state': '135',
                'redirect_uri': ('{0}{1}?next={2}').format(settings.M_SITE_URL,
                                                           reverse('rest_v2:xlmm-wxauth'),
                                                           next_url)
            }
            next_url = gen_weixin_redirect_url(params)
        return Response({"code": 0, "message": u"登陆成功", "next": next_url})
Пример #4
0
    def customer_login(self, request):
        """验证用户登录"""
        # 获取用户名和密码
        # 判断网址的结尾是不是登录请求网址(ajax url请求)
        if not request.path.endswith("customer_login"):
            return Response({"result": "fail"})
        username = request.data.get('username')
        password = request.data.get('password')
        next_url = request.data.get('next', '/index.html')
        if not username or not password:
            return Response({"code": 1, "result": "null"})
        try:
            try:
                customer = Customer.objects.get(mobile=username)
            except (Customer.DoesNotExist, Customer.MultipleObjectsReturned):
                pass
            else:
                username = customer.user.username

            user1 = authenticate(username=username, password=password)
            if not user1 or user1.is_anonymous:
                return Response({"code": 2, "result": "p_error"})  # 密码错误
            login(request, user1)

            user_agent = request.META.get('HTTP_USER_AGENT')
            if not user_agent or user_agent.find('MicroMessenger') < 0:
                return Response({"code": 0, "result": "login", "next": next_url})  # 登录不是来自微信,直接返回登录成功

            customers = Customer.objects.filter(user=user1).exclude(status=Customer.DELETE)
            if customers.count() == 0 or customers[0].is_wxauth():
                return Response({"code": 0, "result": "login", "next": next_url})  # 如果是系统帐号登录,或已经微信授权过,则直接返回登录成功

            params = {'appid': settings.WX_PUB_APPID,
                      'redirect_uri': ('{0}{1}?next={2}').format(settings.M_SITE_URL, reverse('rest_v1:xlmm-wxauth'),
                                                                 next_url),
                      'response_type': 'code',
                      'scope': 'snsapi_base',
                      'state': '135'}
            redirect_url = gen_weixin_redirect_url(params)
            return Response({"code": 0, "result": "login", "next": redirect_url})  # 如果用户没有微信授权则直接微信授权后跳转

        except Customer.DoesNotExist:
            return Response({"code": 3, "result": "u_error"})  # # 用户错误
        except Customer.MultipleObjectsReturned:
            return Response({"code": 4, "result": "s_error"})  # 账户异常
        except ValueError, exc:
            return Response({"code": 5, "result": "no_pwd"})
Пример #5
0
    def weixin_auth_and_redirect(self, request):
        next_url = request.GET.get('next')
        code = request.GET.get('code')

        if not in_weixin(request):
            return HttpResponseRedirect(next_url)

        user = request.user
        if not user or user.is_anonymous:
            return HttpResponseRedirect(next_url)

        redirect_url = next_url
        if not code:
            params = {'appid': settings.WX_PUB_APPID,
                      'redirect_uri': request.build_absolute_uri().split('#')[0],
                      'response_type': 'code',
                      'scope': 'snsapi_base',
                      'state': '135'}
            redirect_url = gen_weixin_redirect_url(params)

        return HttpResponseRedirect(redirect_url)
Пример #6
0
    def _checklogin(request, *args, **kwargs):
        if request.user.is_active:
            # The user is valid. Continue to the admin page.
            return view_func(request, *args, **kwargs)

        code = request.GET.get('code')
        user_agent = request.META.get('HTTP_USER_AGENT')
        if user_agent and user_agent.find('MicroMessenger') >= 0:
            if not code:
                params = {
                    'appid': settings.WX_PUB_APPID,
                    'redirect_uri': request.build_absolute_uri().split('#')[0],
                    'response_type': 'code',
                    'scope': 'snsapi_base',
                    'state': '135'
                }
                redirect_url = options.gen_weixin_redirect_url(params)
                return HttpResponseRedirect(redirect_url)

            else:
                user = authenticate(request=request,
                                    auth_code=code,
                                    wxpub_appid=settings.WX_PUB_APPID)
                if not user or user.is_anonymous:
                    return HttpResponseRedirect(reverse('flashsale_login'))

                request.session[SESSION_KEY] = user.id
                auth_login(request, user)

                return view_func(request, *args, **kwargs)

        defaults = {
            REDIRECT_FIELD_NAME: request.build_absolute_uri().split('#')[0]
        }
        return redirect('{}?{}'.format(constants.MALL_LOGIN_URL,
                                       urllib.urlencode(defaults)))
Пример #7
0
def weixin_auth_and_redirect(request):
    next_url = request.GET.get('next')
    code = request.GET.get('code')
    user_agent = request.META.get('HTTP_USER_AGENT')
    if not user_agent or user_agent.find('MicroMessenger') < 0:
        return HttpResponseRedirect(next_url)

    user = request.user
    if not user or user.is_anonymous:
        return HttpResponseRedirect(next_url)

    if not code:
        params = {
            'appid': settings.WX_PUB_APPID,
            'redirect_uri': request.build_absolute_uri().split('#')[0],
            'response_type': 'code',
            'scope': 'snsapi_base',
            'state': '135'
        }
        redirect_url = options.gen_weixin_redirect_url(params)
        return HttpResponseRedirect(redirect_url)
    else:
        task_Merge_Sale_Customer.delay(user, code)
        return HttpResponseRedirect(next_url)