【问题标题】:How to inject a google app engine 'user' from android client side?如何从安卓客户端注入谷歌应用引擎“用户”?
【发布时间】:2016-04-19 14:08:03
【问题描述】:

例如,我的一个端点从支持中获取(用户用户)。如何使用 google 身份验证从我的 android 客户端向后端注入这个“用户”?

【问题讨论】:

    标签: android google-app-engine google-cloud-endpoints google-authentication


    【解决方案1】:

    看看这里的 GAE 注入类型:

    https://cloud.google.com/appengine/docs/java/endpoints/paramreturn_types#injected_types

    如果您使用 Google 的身份验证,用户将被自动注入到 Endpoints API 方法中,然后您可以执行检查用户是否存在(例如在您的数据存储中)、将用户保存到数据存储等操作。

    它的工作方式是在您的 Android 客户端中,系统会提示用户通过 oAuth2.0 登录其 Google 帐户,一旦登录,GoogleAccountCredential 对象就会被传递到构建器中。

    这是取自docs的示例代码:

    // Inside your Activity class onCreate method
    settings = getSharedPreferences("TicTacToeSample", 0);
    credential = GoogleAccountCredential.usingAudience(this,
        "server:client_id:1-web-app.apps.googleusercontent.com");
    setSelectedAccountName(settings.getString(PREF_ACCOUNT_NAME, null));
    
    Tictactoe.Builder builder = new Tictactoe.Builder(
        AndroidHttp.newCompatibleTransport(), new GsonFactory(),
        credential);
    service = builder.build();
    
    if (credential.getSelectedAccountName() != null) {
      // Already signed in, begin app!
    } else {
      // Not signed in, show login window or request an account.
    }
    
    // setSelectedAccountName definition
    private void setSelectedAccountName(String accountName) {
      SharedPreferences.Editor editor = settings.edit();
      editor.putString(PREF_ACCOUNT_NAME, accountName);
      editor.commit();
      credential.setSelectedAccountName(accountName);
      this.accountName = accountName;
    }
    

    基本上发生了一些神奇的事情,Cloud Endpoints 现在能够将登录的用户注入到您的 Endpoints 方法中。并且您可以检查它是否为空(如果为空,则身份验证不好,因此抛出未经授权的错误),获取该用户的电子邮件等。

    希望能帮助您入门。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-27
      • 1970-01-01
      相关资源
      最近更新 更多