首页 > 解决方案 > 如何通过登录从 Github 用户获取令牌?

问题描述

背景

假设我想使用代码(Kotlin/Java)在 Github 上搜索一些电子邮件地址。

问题

我在没有任何登录令牌的情况下成功地做到了,但据我所知,它仅限于每分钟 10 个查询,如果我有来自用户的令牌(从登录到 Github),它每分钟增加 30 个查询。

要在不登录的情况下从 Github 获取信息,我使用 OKHTTP 来访问它(从这里找到):

https://api.github.com/search/users?q=$email+in:EMAIL_ADDRESS_HERE

如果我可以使用令牌,它可能是:

https://api.github.com/search/users?q=$email+in:EMAIL_ADDRESS_HERE&access_token=$TOKEN_HERE

但我不知道如何从用户那里获得这个令牌。我可以使用网站本身找到如何为自己制作一个。

我发现并尝试过的

我向 Github 询问了它是如何完成的,但他们向我展示了一些curl 代码,遗憾的是我不熟悉它,我不知道它是如何在那里完成的以及如何将其转换为 Kotlin/Java。我试图阅读替代品,但后来我发现了一些关于它是如何完成的缺失信息(缺失了参数所需的先前数据)。我什至不知道它是通过使用 WebView 还是直接联系 Github 服务器来工作。如果是直接联系 Github 服务器,是不是意味着我需要为用户提供 userName&password EditTexts?

这是我在教程中看到的代码:

    JsonFactory jsonFactory = new JacksonFactory();
    HttpTransport httpTransport = new NetHttpTransport();
    AuthorizationCodeFlow flow = new AuthorizationCodeFlow.Builder(
    BearerToken.authorizationHeaderAccessMethod(),
    httpTransport, jsonFactory,
    new GenericUrl("https://github.com/login/oauth/access_token"),
    new ClientParametersAuthentication( /* Client ID and Secret */ ),
    /* Client ID */
    "https://github.com/login/oauth/authorize").build();

    TokenResponse tokenResponse = flow
    .newTokenRequest(code)
    .setScopes(Collections.singletonList("user:email"))
    .setRequestInitializer(new HttpRequestInitializer() {
    @Override
    public void initialize(HttpRequest request) throws IOException {
    request.getHeaders().setAccept("application/json");
    }
    }).execute();

所以,这里缺少的是“Client ID and Secret”、“code”,以及用户自己提供的部分:获取令牌的用户名和密码。

问题

如何进入整个登录过程,并最终获得要使用的令牌?

它应该使用 WebView 为用户提供所有登录选项,还是应该使用我自己的 UI 来放置用户名和密码?

标签: androidgithub

解决方案


Github 支持OAuth 2.0身份验证。您可以根据此示例在 Github 上设置您的应用程序以启用此功能,您还可以使用AppAuth来处理身份验证过程。


推荐阅读