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_auth_qrcode(): '''微信授权的URL''' # rep = oauth_service.authorize( # callback = url_for( # 'sso_authorized', next=request.args.get('next'), # uuid=uuid,_external = True # ) # ) uuid = request.args.get('uuid') if uuid is None: return 'uuid not found',400 scope = ("snsapi_userinfo",) api = WeixinMpAPI(appid=app.config.get('WEIXIN_CONSUMER_KEY'), app_secret=app.config.get('MER_SECRET'), redirect_uri=url_for('sso_authorized', client_id=request.args.get('client_id'), response_type=request.args.get('response_type'), scope=request.args.get('scope'), redirect_uri=request.args.get('redirect_uri'), uuid= uuid, _external = True)) authorize_url = api.get_authorize_url(scope=scope) +'#wechat_redirect' log.debug('authorize_url: %s',authorize_url) #创建二维码 set_uuid_true_url(uuid,authorize_url) img=create_qrcode(url_for('true_url',uuid=uuid,_external=True)) out=BytesIO() img.save(out, "PNG") #返回二维码字节流 return out.getvalue(),200
def wechat_auth_url_request(request): #REDIRECT_URI = "http://%s%s" % (request.META['HTTP_HOST'], reverse("login", kwargs={})) REDIRECT_URI = request.build_absolute_uri('/').strip("/") + reverse( "wechat_auth_login", kwargs={}) api = WeixinMpAPI(appid=settings.APP_ID, app_secret=settings.APP_SECRET, redirect_uri=REDIRECT_URI) redirect_uri = api.get_authorize_login_url(scope=("snsapi_userinfo", )) return redirect( redirect_uri ) # "GET /zh/authwrapper/weixin/auth_login/?code=081xJ2wf2A2pbJ05JNwf2RPmwf2xJ2wT&state= HTTP/1.1" 302 0
def unauthorized(): '''没有登录过,通过微信登录''' scope = ("snsapi_userinfo",) api = WeixinMpAPI(appid=app.config.get('WEIXIN_CONSUMER_KEY'), app_secret=app.config.get('WEIXIN_CONSUMER_SECRET'), redirect_uri=url_for('authorized', client_id=request.args.get('client_id'), response_type=request.args.get('response_type'), scope=request.args.get('scope'), redirect_uri=request.args.get('redirect_uri'), _external = True)) authorize_url = api.get_authorize_url(scope=scope) +'#wechat_redirect' log.debug('authorize_url: %s',authorize_url) return redirect(authorize_url)
class WechatAuth(): def __init__(self): self.PC_api = WeixinAPI(appid = PC_APP_ID, app_secret = PC_APP_SECRET, redirect_uri = REDIRECT_URL) self.Mobile_api = WeixinMpAPI(appid = WX_APP_ID, app_secret = WX_APP_SECRET, redirect_uri = REDIRECT_URL) self.pc_auth_url = self.PC_api.get_authorize_url(scope=(PC_SCOPE,)) self.mobile_auth_url = self.Mobile_api.get_authorize_url(scope=(WX_SCOPE,)) def get_authorize_url(self, request): if checkMobile(request) == True: print self.mobile_auth_url return self.mobile_auth_url else: print self.pc_auth_url return self.pc_auth_url 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) return None
def __init__(self): self.PC_api = WeixinAPI(appid = PC_APP_ID, app_secret = PC_APP_SECRET, redirect_uri = REDIRECT_URL) self.Mobile_api = WeixinMpAPI(appid = WX_APP_ID, app_secret = WX_APP_SECRET, redirect_uri = REDIRECT_URL) self.pc_auth_url = self.PC_api.get_authorize_url(scope=(PC_SCOPE,)) self.mobile_auth_url = self.Mobile_api.get_authorize_url(scope=(WX_SCOPE,))
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={}))) 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 sso_authorized(): '''微信扫码通过,返回微信OAuth的code''' code = request.args.get('code') uuid = request.args.get('uuid') log.debug('code=%s',code) log.debug('uuid=%s',uuid) 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) #获取用户信息 user = User.get_user_by_openid(openid = auth_info['openid']) # if user is None: # #增加用户 # user = User.add_user(openid = auth_info['openid']) if user is None or user.type is None or user.type == 'guest': log.error('get user failed, openid=%s',auth_info['openid']) #TODO:非注册用户无法使用PC WEB系统,应该将用户重定向到注册页面 return redirect(REGISTER_PAGE+'?next='+urllib.request.quote(url_for('true_url',uuid=uuid,_external=True))) log.debug('user:%s',user.id) session['id']=user.id session['uuid']=uuid login_user(AuthUser(id = user.id, openid = user.openid, mobile = user.mobile, name = user.name,data = user.to_json())) #获取Code rep=oauth_provider.confirm_authorization_request() log.debug('rep:%s',rep.headers) return render_template('wx_login_success.html')
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
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 wechatlogin(request): #REDIRECT_URI = "http://%s%s" % (request.META['HTTP_HOST'], reverse("login", kwargs={})) REDIRECT_URI = request.build_absolute_uri('/').strip("/") + reverse("login", kwargs={}) api = WeixinMpAPI(appid=APP_ID, app_secret=APP_SECRET,redirect_uri=REDIRECT_URI) redirect_uri = api.get_authorize_login_url(scope=("snsapi_userinfo",)) return redirect(redirect_uri)
def wechatlogin(request): REDIRECT_URI = "http://%s%s" % (request.META['HTTP_HOST'], reverse("home", kwargs={})) api = WeixinMpAPI(appid=APP_ID, app_secret=APP_SECRET,redirect_uri=REDIRECT_URI) redirect_uri = api.get_authorize_login_url(scope=("snsapi_userinfo",)) return redirect(redirect_uri)