2017-01-20 47 views
2

問題在短期谷歌認證:登錄與DRF,蟒蛇 - 社會 - 身份驗證和Angularjs工作與Facebook,但不是谷歌。使用Django休息框架和Python-社會AUTH

我正在構建一個django應用程序,需要用戶通過Facebook和Google註冊/登錄以及本地存儲的電子郵件/密碼組合。它的工作原理如下:

  1. 對於註冊和登錄,Angularjs用它們各自的app_id啓動FB和google apis(FB.init和gapi.auth2.init)。所有需要的js庫都包含在頁面中。
  2. 根據用戶的選擇,這兩個頁面都允許用戶使用Facebook或Google登錄,或讓他們輸入他們的電子郵件/密碼組合。
  3. 所有必需的信息,包括他們的access_token都是通過FB或Google的API收集的。
  4. 當用戶在填寫完所有相關詳細信息(註冊要求他們輸入一些附加數據)後提交表單時,包含access_token的數據將通過AJAX請求發送到服務器。
  5. 在服務器端,基於類的視圖LoginView和SignUpView接受請求並處理它們。基於電子郵件的註冊/登錄由代碼直接處理。基於Google/FB的註冊/登錄被傳遞給python-social-auth的do_auth函數進行認證。
  6. 當提供商選擇是facebook,這工作正常。當它是Google(嘗試google-oauth2google-plus)時,do_auth最終引發403 Forbidden錯誤。當相關網址,https://googleapis.com/plus/v1/people/me?access_token=ACCESS_TOKEN&alt=json複製到瀏覽器中,它顯示一個錯誤信息:

對未驗證的日常使用超出限制。持續使用需要 註冊

  • 我確信下面的事情:
      在谷歌開發者控制檯
    1. 啓用了Google+ API爲對應的應用程序
    2. 在谷歌開發者控制檯中,將http://localhost:5001添加到javascript原始字段並將http://localhost:5001/social/complete添加到重定向的uri字段(稍後填充字段,結果相同或不相同)
    3. 生成的密鑰和複製的client_id和client_secret t settings.SOCIAL_AUTH_GOOGLE_OAUTH2_KEYsettings.SOCIAL_AUTH_GOOGLE_OAUTH2_SECRET。仔細檢查他們的準確性
    4. 將settings.AUTHENTICATION_BACKENDS添加到'social.backends.google.GoogleOAuth2'。嘗試將GoogleOAuth2和GooglePlus放在一起並單獨放置。
    5. 用PLUS也嘗試了所有這些,而不是OAUTH2。仍然是同樣的結果。
    6. 設置後再次嘗試,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 
    
    +0

    發現有關我的Q @aragen的這個答覆,可以是有用的: http://stackoverflow.com/a/28355531/7447662。我遵循與你一樣的方法。對此有何想法? –

    回答

    1

    我最近有類似的問題掙扎,但因爲我使用Django的休息框架,社會的oauth2我的情況是有點不同。所有我注意到你的

    首先啓用了Google+ API,但是:

    加入 'social.backends.google.GoogleOAuth2' 到settings.AUTHENTICATION_BACKENDS。

    嘗試更改設置,(這在python social auth docs描述):

    AUTHENTICATION_BACKENDS = (
    ... 
    'social_core.backends.google.GooglePlusAuth', 
    ) 
    
    SOCIAL_AUTH_GOOGLE_PLUS_KEY = '...' 
    SOCIAL_AUTH_GOOGLE_PLUS_SECRET = '...' 
    

    另一件事情對你來說是google oauth playground