Beispiel #1
0
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)    
Beispiel #2
0
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
Beispiel #3
0
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
Beispiel #4
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)
Beispiel #5
0
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
Beispiel #6
0
    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,))
Beispiel #7
0
    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)
Beispiel #8
0
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)    
Beispiel #9
0
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')
Beispiel #10
0
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
Beispiel #11
0
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)
Beispiel #12
0
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)
Beispiel #13
0
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)
Beispiel #14
0
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)
Beispiel #15
0
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)