经过很长的时间,浪费了很多时间,我放弃了OAuth2,因为它很难配置,我只需要登录用户即可。下面的代码应该可以帮助需要做类似事情的人,以及可以定做。我所做的就是遵循有关形成网址的说明,在这里->
https://developers.google.com/accounts/docs/OAuth2Login
我做了两个视图(对于不使用Django的用户-页面),并链接到第一个视图:此页面我称为login / google,并从登录页面建立了链接。
def google_login(request): token_request_uri = "https://accounts.google.com/o/oauth2/auth" response_type = "pre" client_id = XXXXXX-your_client_id redirect_uri = "http://mysite/login/google/auth" scope = "https://www.googleapis.com/auth/userinfo.profile https://www.googleapis.com/auth/userinfo.email" url = "{token_request_uri}?response_type={response_type}&client_id={client_id}&redirect_uri={redirect_uri}&scope={scope}".format( token_request_uri = token_request_uri, response_type = response_type, client_id = client_id, redirect_uri = redirect_uri, scope = scope) return HttpResponseRedirect(url)上面的代码重定向到第二页(此页必须在Google应用定义中定义为重定向uri)。我称此页面为login / google / auth:
def google_authenticate(request): parser = Http() login_failed_url = '/' if 'error' in request.GET or 'pre' not in request.GET: return HttpResponseRedirect('{loginfailed}'.format(loginfailed = login_failed_url)) access_token_uri = 'https://accounts.google.com/o/oauth2/token' redirect_uri = "http://mysite/login/google/auth" params = urllib.urlenpre({ 'pre':request.GET['pre'], 'redirect_uri':redirect_uri, 'client_id':XXXXX_your_google_key, 'client_secret':XXXXX_your_google_secret, 'grant_type':'authorization_pre' }) headers={'content-type':'application/x-www-form-urlenpred'} resp, content = parser.request(access_token_uri, method = 'POST', body = params, headers = headers) token_data = jsonDepre(content) resp, content = parser.request("https://www.googleapis.com/oauth2/v1/userinfo?access_token={accessToken}".format(accessToken=token_data['access_token'])) #this gets the google profile!! google_profile = jsonDepre(content) #log the user in--> #HERE YOU LOG THE USER IN, OR ANYTHING ELSE YOU WANT #THEN REDIRECT TO PROTECTED PAGE return HttpResponseRedirect('/dashboard')我真的希望这可以帮助人们,并节省他们浪费的时间。欢迎对代码发表评论!



