簡體   English   中英

Google Cloud Endpoints OAuth身份驗證

[英]Google Cloud Endpoints OAuth Authentication

我正在開發一個具有在Google App Engine上運行的后端的Android add,並且最近激活了OAuth2身份驗證。 我的問題是,當我進行全新安裝且用戶之前未使用其Google帳戶登錄時,我會顯示登錄對話框,然后他可以通過使用Facebook按鈕登錄來登錄。 從Facebook收到數據后,我向后端進行了授權呼叫,問題是該操作無法執行。 如果我重新啟動應用程序,並且用戶已經使用他的Google帳戶登錄,則一切正常。 PS:在兩種情況下,我都在憑據中設置了所選的帳戶名。

有什么想法為什么在這種情況下不發送請求?

用於創建憑證的代碼:

    settings = getSharedPreferences("whostrPrefs", MODE_PRIVATE);
    credential = GoogleAccountCredential.usingAudience(this, ID);

    setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));

    if(credential.getSelectedAccountName() != null)
    {
        //all ok
        Log.d("AccountName", "Everything is ok!");
    }
    else
    {
        Log.d("AccountName", "User needs to loggin!");
        chooseAccount();
    }

setSelectedAccount方法:

private void setSelectedAccountName(String accountName)
{
    SharedPreferences.Editor editor = settings.edit();
    editor.putString(PREF_ACCOUNT_NAME, accountName);
    editor.commit();

    credential.setSelectedAccountName(accountName);
    this.accountName = accountName;
}

ChooseAccount方法:

 void chooseAccount()
{
    startActivityForResult(credential.newChooseAccountIntent(), REQUEST_ACCOUNT_PICKER);
}

還有onActivityResult方法的代碼段:

            case REQUEST_ACCOUNT_PICKER:
            if(data != null && data.getExtras() != null)
            {
                String accountName = data.getExtras().getString(AccountManager.KEY_ACCOUNT_NAME);
                if(accountName != null)
                {
                    setSelectedAccountName(accountName);
                    SharedPreferences.Editor editor = settings.edit();
                    editor.putString(PREF_ACCOUNT_NAME, accountName);
                    editor.commit();
                    Log.d("AccountName", "User is authorized!");
                    //user is authorized
                }
            }
            break;

和實際的調用:

          Userendpoint.Builder builder = new Userendpoint.Builder(AndroidHttp.newCompatibleTransport(), new GsonFactory(), credential);
            Userendpoint service = builder.build();

           try
        {
        response = service.loginuser(params[0], params[1], params[2], params[3],              longitude,latitude).execute();
        }

關於可能是什么問題的任何想法? 我做錯什么了嗎? 代碼到達我打電話的地方...但是沒有通過。

LE:對端點的調用是使用Google登錄憑據(如Google App Engine網站上的教程中所示)進行的,但是由於某種原因根本沒有執行該調用。 沒有憑據的呼叫將引發正確的未授權異常。

內置的Cloud Endpoints Auth僅適用於Google登錄(或OpenID,具體取決於您在創建項目時選擇的身份驗證類型)。

為了與其他任何提供程序進行身份驗證,您需要編寫自定義代碼。 您可以通過在API參數中傳遞facebook身份驗證信息來實現。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM