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)
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)
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})
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"})
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)
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)))
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)