繁体   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