Google аутентификация для создания модели пользователя в Django - PullRequest
0 голосов
/ 23 мая 2019

Я хочу подтвердить пользователя из Google и сохранить данные пользователя в моей базовой модели пользователя. Следуя официальному учебнику https://developers.google.com/api-client-library/python/auth/web-app Я создал приложение, которое проверяет пользователя, но проблема в том, что мне нужно сначала создать пользователя, а затем подтвердить его подлинность с помощью Google. Я хочу, чтобы пользователь сначала подтвердил с помощью Google, а затем мой код должен создать пользователя, используя данные, полученные из Google.

Вот мои взгляды.py:

FLOW = flow_from_clientsecrets(
    settings.GOOGLE_OAUTH2_CLIENT_SECRETS_JSON,
    scope='profile email',#enter your required scope
    redirect_uri='http://127.0.0.1:8000/home',
    prompt='consent')

def gmail_authenticate(request):
    storage = DjangoORMStorage(CredentialsModel, 'id', request.user, 'credential')
    credential = storage.get() #credential of the user
    if credential is None or credential.invalid:
        #credential is not present or invalid
        #so, generating credential
        FLOW.params['state'] = xsrfutil.generate_token(settings.SECRET_KEY,
                                                       request.user)
        authorize_url = FLOW.step1_get_authorize_url()
        return HttpResponseRedirect(authorize_url)
    else:
        #if credential is present and valid
        http = httplib2.Http()
        http = credential.authorize(http)
        service = build('gmail', 'v2', http=http)
        print('access_token = ', credential.access_token)
        status = True
        return render(request, 'index.html', {'status': status})

def auth_return(request):
    get_state = bytes(request.GET.get('state'), 'utf8')
    if not xsrfutil.validate_token(settings.SECRET_KEY, get_state,
                                   request.user):
        return HttpResponseBadRequest()
    #storing credential to DB
    credential = FLOW.step2_exchange(request.GET.get('code'))
    storage = DjangoORMStorage(CredentialsModel, 'id', request.user, 'credential')
    storage.put(credential)
    print("access_token: %s" % credential.access_token)
    return HttpResponseRedirect("/")

Классу DjangoORMStorage требуется пользовательский экземпляр, но я не хочу создавать пользователя, пока пользователь не подтвердит мой Google. Помогите мне изменить мой код и поток.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...