def login(request): REDIRECT_URI = request.POST.get('next', request.GET.get('next', reverse("home", kwargs={}))) #next indicated in templaetes if request.method == 'GET': code = request.GET.get('code') if code: redirect_to = "http://%s%s" % (request.META['HTTP_HOST'], reverse("home", kwargs={})) # redirection URL after authenticate api = WeixinMpAPI(appid=APP_ID, app_secret=APP_SECRET, redirect_uri=redirect_to) auth_info = api.exchange_code_for_access_token(code=code) api = WeixinMpAPI(access_token=auth_info['access_token']) api_user = api.user(openid=auth_info['openid']) user = authenticate(request = request, user = api_user) if user and not user.is_anonymous(): auth_login(request, user) return redirect(redirect_to) return redirect(reverse("auth_login", kwargs={})) else: #normal login is POST REDIRECT_FIELD_NAME = 'next' return auth_views.login(request, redirect_field_name=REDIRECT_FIELD_NAME, extra_context=None) # below method is also OK username = request.POST['username'] password = request.POST['password'] user = authenticate(request=request, username=username, password=password) if user is not None: auth_login(request, user) else: return redirect(reverse("auth_login", kwargs={})) return auth_views.login(request, redirect_field_name=REDIRECT_URI, extra_context=None)
def get_user(self, request): try: code = "" if request.GET.has_key('code'): code = request.GET['code'] else: return None if checkMobile(request) == True: auth_info = self.Mobile_api.exchange_code_for_access_token(code=code) userApi = WeixinMpAPI(access_token=auth_info['access_token']) user_info = userApi.user(openid=auth_info['openid']) print auth_info, user_info return user_info else: auth_info = self.PC_api.exchange_code_for_access_token(code=code) userApi = WeixinAPI(access_token=auth_info['access_token']) user_info = userApi.user(openid=auth_info['openid']) return user_info except Exception, e: printError(e)
def login(request): REDIRECT_URI = request.POST.get( 'next', request.GET.get('next', reverse("home", kwargs={}))) #next indicated in templaetes if request.method == 'GET': code = request.GET.get('code') if code: redirect_to = "http://%s%s" % ( request.META['HTTP_HOST'], reverse( "home", kwargs={})) # redirection URL after authenticate api = WeixinMpAPI(appid=settings.APP_ID, app_secret=settings.APP_SECRET, redirect_uri=redirect_to) auth_info = api.exchange_code_for_access_token(code=code) api = WeixinMpAPI(access_token=auth_info['access_token']) api_user = api.user(openid=auth_info['openid']) user = authenticate(request=request, user=api_user) if user and not user.is_anonymous(): auth_login(request, user) return redirect(redirect_to) return redirect(reverse("auth_login", kwargs={})) else: #normal login is POST REDIRECT_FIELD_NAME = 'next' return auth_views.login(request, redirect_field_name=REDIRECT_FIELD_NAME, extra_context=None) # below method is also OK username = request.POST['username'] password = request.POST['password'] user = authenticate(request=request, username=username, password=password) if user is not None: auth_login(request, user) else: return redirect(reverse("auth_login", kwargs={})) return auth_views.login(request, redirect_field_name=REDIRECT_URI, extra_context=None)
def wechat_auth_login(request): REDIRECT_URI = request.POST.get( 'next', request.GET.get('next', default_redirect_url)) #next indicated in templaetes if request.method == 'GET': code = request.GET.get('code') if code: redirect_to = "http://%s%s" % ( request.META['HTTP_HOST'], default_redirect_url ) # redirection URL after authenticate api = WeixinMpAPI(appid=settings.APP_ID, app_secret=settings.APP_SECRET, redirect_uri=redirect_to) auth_info = api.exchange_code_for_access_token(code=code) api = WeixinMpAPI(access_token=auth_info['access_token']) api_user = api.user(openid=auth_info['openid']) user = authenticate(request=request, user=api_user) if user and not user.is_anonymous(): auth_login(request, user) return redirect(redirect_to) else: print "authenticate failure, redirect to login page" else: print "not code in GET request, this is not correct wechat login request, redirect to login page" # return redirect(reverse("auth_login", kwargs={})) # registration url return redirect(reverse("auth_view_login", kwargs={})) else: # normal login is POST REDIRECT_FIELD_NAME = 'next' return auth_views.login(request, template_name='auth/registration/login.html', redirect_field_name=REDIRECT_FIELD_NAME, extra_context=None) # below method is also OK auth_login_post(request) # return auth_views.login(request, redirect_field_name=REDIRECT_URI, extra_context=None)
def login(request): REDIRECT_URI = request.POST.get('next', request.GET.get('next', reverse("home", kwargs={}))) if request.method == 'GET': try: code = request.GET.get('code') if code: redirect_to = "http://%s%s" % (request.META['HTTP_HOST'], reverse("home", kwargs={})) api = WeixinMpAPI(appid=APP_ID, app_secret=APP_SECRET, redirect_uri=redirect_to) auth_info = api.exchange_code_for_access_token(code=code) api = WeixinMpAPI(access_token=auth_info['access_token']) api_user = api.user(openid=auth_info['openid']) user = authenticate(request=request, user=api_user) if user: auth.login(request, user) return redirect(redirect_to) else: pass #return redirect(reverse("registration_register", kwargs={})) else: pass except: pass return redirect(reverse("auth_login", kwargs={})) else: REDIRECT_FIELD_NAME = 'next' return auth_views.login(request, redirect_field_name=REDIRECT_FIELD_NAME, extra_context=None) # below method is also OK username = request.POST['username'] password = request.POST['password'] user = authenticate(request=request, username=username, password=password) if user is not None: auth.login(request, user) else: return redirect(reverse("auth_login", kwargs={})) return auth_views.login(request, redirect_field_name=REDIRECT_URI, extra_context=None)
def authorized(*args, **kargs): '''微信的OAuth Redirect Endpoint''' code = request.args.get('code') log.debug('code=%s',code) if code == 'authdeny': return False api = WeixinMpAPI(appid=app.config.get('WEIXIN_CONSUMER_KEY'), app_secret=app.config.get('WEIXIN_CONSUMER_SECRET'), redirect_uri=url_for('authorize', _external = True)) auth_info = api.exchange_code_for_access_token(code = code) if not 'openid' in auth_info: log.info('exchange_code_for_access_token failed( code = %s )', code) return False log.debug('auth_info:%s',auth_info) #获取用户的微信信息 api = WeixinMpAPI(access_token=auth_info['access_token']) wx_userinfo = api.user(openid = auth_info['openid']) log.debug('wx_userinfo: %s',wx_userinfo) nickname = wx_userinfo.get('nickname') #获取用户信息 user = User.get_user_by_openid(openid = auth_info['openid']) if user is None: #增加用户 user = User.add_user(openid = auth_info['openid'],nickname = nickname) if user is None: log.error('get user failed, openid=%s',auth_info['openid']) return False log.debug('user:%s',user) session['id'] = user.id login_user(AuthUser(id = user.id, openid = user.openid, mobile = user.mobile, name = user.name,data = user.to_json()), remember = True) return True