2
問題在短期谷歌認證:登錄與DRF,蟒蛇 - 社會 - 身份驗證和Angularjs工作與Facebook,但不是谷歌。使用Django休息框架和Python-社會AUTH
我正在構建一個django應用程序,需要用戶通過Facebook和Google註冊/登錄以及本地存儲的電子郵件/密碼組合。它的工作原理如下:
- 對於註冊和登錄,Angularjs用它們各自的app_id啓動FB和google apis(FB.init和gapi.auth2.init)。所有需要的js庫都包含在頁面中。
- 根據用戶的選擇,這兩個頁面都允許用戶使用Facebook或Google登錄,或讓他們輸入他們的電子郵件/密碼組合。
- 所有必需的信息,包括他們的
access_token
都是通過FB或Google的API收集的。 - 當用戶在填寫完所有相關詳細信息(註冊要求他們輸入一些附加數據)後提交表單時,包含
access_token
的數據將通過AJAX請求發送到服務器。 - 在服務器端,基於類的視圖LoginView和SignUpView接受請求並處理它們。基於電子郵件的註冊/登錄由代碼直接處理。基於Google/FB的註冊/登錄被傳遞給python-social-auth的
do_auth
函數進行認證。 - 當提供商選擇是
facebook
,這工作正常。當它是Google
(嘗試google-oauth2
和google-plus
)時,do_auth
最終引發403 Forbidden錯誤。當相關網址,https://googleapis.com/plus/v1/people/me?access_token=ACCESS_TOKEN&alt=json複製到瀏覽器中,它顯示一個錯誤信息:
對未驗證的日常使用超出限制。持續使用需要 註冊
- 我確信下面的事情:
-
在谷歌開發者控制檯
- 啓用了Google+ API爲對應的應用程序
- 在谷歌開發者控制檯中,將
http://localhost:5001
添加到javascript原始字段並將http://localhost:5001/social/complete
添加到重定向的uri字段(稍後填充字段,結果相同或不相同) - 生成的密鑰和複製的client_id和client_secret t
settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEY
和settings.SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET
。仔細檢查他們的準確性 - 將settings.AUTHENTICATION_BACKENDS添加到
'social.backends.google.GoogleOAuth2'
。嘗試將GoogleOAuth2和GooglePlus放在一起並單獨放置。 - 用PLUS也嘗試了所有這些,而不是OAUTH2。仍然是同樣的結果。
- 設置後再次嘗試,
settings.SOCIAL_AUTH_USE_DEPRECATED_API
爲真。這也失敗,但現在的錯誤是401
下一步做什麼讓這與谷歌的認證工作壓力太大?在此討論了許多其他類似的問題以及Github中報告的問題。
下面是相關代碼:
class SignUpView(CreateAPIView):
def create(self, request, *args, **kwargs):
provider = request.data['provider']
strategy = load_strategy(request)
backend = load_backend(strategy=strategy, name=provider, redirect_uri=None)
token = request.data['access_token']
try:
user = backend.do_auth(token, user=None, **data)
except AuthAlreadyAssociated:
pass
發現有關我的Q @aragen的這個答覆,可以是有用的: http://stackoverflow.com/a/28355531/7447662。我遵循與你一樣的方法。對此有何想法? –