Exemplo n.º 1
0
def auth_google_after(resp):
    if resp is None:
        return 'Access denied: ' \
               'reason={0.error_reason} error={0.error_description}' \
            .format(request.args)
    elif isinstance(resp, OAuthException):
        return redirect(url_for('.auth_google'))
    id_token = decode_jwt(resp['id_token'])
    user_key = id_token['user_id']
    s = get_session()
    try:
        cred = s.query(GoogleOAuth2).filter_by(key=user_key).one()
    except NoResultFound:
        # 회원가입
        token = (resp['access_token'], '')
        r = google_oauth2.get('oauth2/v3/userinfo', token=token)
        userinfo = r.data
        user = User(None, userinfo['name'], status=UserStatus.unregistered)
        user.emails.append(Email(userinfo['email'], verified=True))
        user.primary_email = userinfo['email']
        cred = GoogleOAuth2(user, resp, user_key=user_key)
        s.add(user)
        s.add(cred)
        s.commit()
    if cred.user.status == UserStatus.unregistered:
        return register_form(cred.user)
    else:
        # 로그인
        cred.token = resp
        s.commit()
        flask.ext.login.login_user(cred.user)
        next_url = request.values.get('next', resource_url(cred.user))
        return redirect(next_url)
Exemplo n.º 2
0
def auth_google_after(resp):
    if resp is None:
        return "Access denied: " "reason={0.error_reason} error={0.error_description}".format(request.args)
    elif isinstance(resp, OAuthException):
        return redirect(url_for(".auth_google"))
    id_token = decode_jwt(resp["id_token"])
    user_key = id_token["user_id"]
    s = get_session()
    try:
        cred = s.query(GoogleOAuth2).filter_by(key=user_key).one()
    except NoResultFound:
        # 회원가입
        token = (resp["access_token"], "")
        r = google_oauth2.get("oauth2/v3/userinfo", token=token)
        userinfo = r.data
        user = User(None, userinfo["name"], status=UserStatus.unregistered)
        user.emails.append(Email(userinfo["email"], verified=True))
        user.primary_email = userinfo["email"]
        cred = GoogleOAuth2(user, resp, user_key=user_key)
        s.add(user)
        s.add(cred)
        s.commit()
    if cred.user.status == UserStatus.unregistered:
        return register_form(cred.user)
    else:
        # 로그인
        cred.token = resp
        s.commit()
        flask.ext.login.login_user(cred.user)
        next_url = request.values.get("next", resource_url(cred.user))
        return redirect(next_url)