当前位置: 首页 > 面试题库 >

从Oauth2 Google通讯录API获取用户信息

沈伟
2023-03-14
问题内容

我得到的错误:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 401 Unauthorized
{
  "code" : 401,
  "errors" : [ {
    "domain" : "global",
    "location" : "Authorization",
    "locationType" : "header",
    "message" : "Invalid Credentials",
    "reason" : "authError"
  } ],
  "message" : "Invalid Credentials"
}

下面的代码,我正在使用:

GoogleCredential credential = new GoogleCredential.Builder()
    .setTransport(this.TRANSPORT).setJsonFactory(this.JSON_FACTORY)
    .setClientSecrets(Constants.CLIENT_ID, Constants.CLIENT_SECRET).build();
credential.setAccessToken(tokenResponse.getAccessToken());
credential.setAccessToken(tokenResponse.getRefreshToken());

直到这里,我得到了刷新令牌,访问令牌等

Oauth2 userInfoService = new Oauth2.Builder(this.TRANSPORT,
        this.JSON_FACTORY, credential.getRequestInitializer())
        .setApplicationName(Constants.APPLICATION_NAME).build();

它在以下行失败:(不知道,为什么?)

Userinfo userInfo = userInfoService.userinfo().get().execute();

我在网上搜索过,但很少看到它的示例和稀有资料。任何机构都有想法吗?

我究竟做错了什么?


问题答案:

我猜 credential.getRequestInitializer() 为空。

我已经通过将自定义请求初始化程序设置为凭证对象来解决了此问题

GoogleCredential credential = new GoogleCredential.Builder()
.setTransport(this.TRANSPORT).setJsonFactory(this.JSON_FACTORY)
.setClientSecrets(Constants.CLIENT_ID, Constants.CLIENT_SECRET).setRequestInitializer((new HttpRequestInitializer(){
                @Override
                public void initialize(HttpRequest request)
                        throws IOException {
                    request.getHeaders().put("Authorization", "Bearer " + accessToken);
                }
            })).build()

Google的文档规定了以下内容:

**例如,使用access_token查询字符串参数对UserInfo API的调用如下所示:

GET
https://www.googleapis.com/oauth2/v1/userinfo?access_token=
{accessToken}使用HTTP标头中的访问令牌对同一API的调用如下所示:

GET / oauth2 / v1 / userinfo HTTP / 1.1授权:Bearer
{accessToken}主机:googleapis.com **

希望这个能对您有所帮助



 类似资料:
  • 如果我在Instagram上有粉丝关注我的内容,并且在网上也有注册用户,有没有办法将两者联系起来? 有没有办法发现Instagram上的一个用户是否喜欢一张照片,并看看那个用户是否在我的网站上注册了?

  • cmf_get_current_user() 功能 获取当前登录的前台用户的信息,未登录时,返回false 参数 无 返回 array:用户信息;false表示未登录;

  • 我对Twitter API和对OAuth的总体理解存在问题。我可以轻松地请求从我的帐户中提取信息。我遇到的问题是,其他用户可能会使用“使用Twitter登录”。即使我能在他们登录后获得其他用户信息,我也无法在其他网站上单独请求他们的信息。php页面(我不想从MySQL获取信息)。我只能在原件上获得他们的信息一次。在他们登录并加载页面后返回php页面。 我将发布一些代码,但我的主要担忧/问题是——是

  • https://graph.facebook.com/v3.0/me?fields=id,name,posts&access_token={#}

  • cmf_get_current_user() 功能 获取当前登录的前台用户的信息,未登录时,返回false 参数 无 返回 array:用户信息;false表示未登录;

  • 问题内容: 我在从此api阅读时遇到麻烦 http://api.xhanch.com/islamic-get-prayer- time.php?lng=67&lat=24&yy=2012&mm=7&gmt=5&m=json 这是我的代码: 此方法始终返回空白字符串,而不是我需要的信息。 问题答案: 这为你提供了一个可行的例子