AuthorizationCodeInstalledApp.authorize(“ user”)。如何为每个用户获取唯一的用户ID?

时间:2019-06-18 21:59:52

标签: google-sheets google-api google-oauth2

我的应用输入的内容是Google表格的网址,它可以获取凭据并读取表格的内容。 当我的应用程序使用Oauth2.0从用户那里获得授权时,我使用下面的Google文档中的示例代码。对于每个用户,我想存储一个唯一的凭据,以便当一个用户多次向我的应用程序请求时,因此我不必每次都创建和存储新的凭据(实际上这部分是在AuthorizationCodeInstalledApp(流程,接收者).authorize(“ user”),当“用户”没有一个新证书时,它将创建一个新的证书。 在示例代码中,我认为没有考虑到多个用户向我的应用发送请求的情况,“用户”不能是多个用户的userID,因此“用户”必须针对每个用户进行调整,这意味着不能恒定。 由于凭据存储在本地,因此如果同一用户在短时间内多次请求,则无需将用户重定向到Google登录页面即可向我的应用授予授权。 我的问题是,当多个用户呼叫我的端点时,我该怎么做才能为每个不同的用户提供唯一的用户ID,那么每个用户都可能在短时间内输入多个url。

我有一个想法,就是如果Google API有一种方法,它可以在获取凭据之前获取用户的唯一信息,例如userID的用户名。

private static Credential getCredentials(final NetHttpTransport HTTP_TRANSPORT) throws IOException {
    // Load client secrets.
    InputStream in = KirbyGsheet.class.getResourceAsStream(CREDENTIALS_FILE_PATH);
    if (in == null) {
        throw new FileNotFoundException("Resource not found: " + CREDENTIALS_FILE_PATH);
    }
    GoogleClientSecrets clientSecrets = GoogleClientSecrets.load(JSON_FACTORY, new InputStreamReader(in));

    // Build flow and trigger user authorization request.
    GoogleAuthorizationCodeFlow flow = new GoogleAuthorizationCodeFlow.Builder(
            HTTP_TRANSPORT, JSON_FACTORY, clientSecrets, SCOPES)
            .setDataStoreFactory(new FileDataStoreFactory(new java.io.File(TOKENS_DIRECTORY_PATH)))
            .setAccessType("offline")
            .build();
    LocalServerReceiver receiver = new LocalServerReceiver.Builder().setPort(9998).build();
    return new AuthorizationCodeInstalledApp(flow, receiver).authorize("user");
}

1 个答案:

答案 0 :(得分:0)

我通过从前端提取用户信息以创建唯一的ID,然后将此ID和url发送到后端来解决此问题