我想验证用户从谷歌和保存用户详细信息到我的基本用户模型。 通过遵循官方教程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("/")
djangormstorage类需要用户实例,但在用户验证我的google之前,我不想创建用户。 帮我修改代码和流程。你知道吗
目前没有回答
相关问题 更多 >
编程相关推荐