使用 Auth0 + Next.js 时不确定在哪里请求 Google 联系人 API 范围

Not sure where to request Google Contacts API scopes when using Auth0 + Next.js

我正尝试通过 Google 验证我的应用程序的两个 Google 联系人只读范围,以便用户可以将他们的联系人导入我的应用程序。

https://www.googleapis.com/auth/contacts.readonly
https://www.googleapis.com/auth/contacts.other.readonly

我在 Next.js 应用程序中使用 Auth0 来处理用户。我使用的包是@auth0/nextjs-auth0。我已经按照文档的建议初始化了 auth0。

// pages/api/auth/[...auth0].ts
import {handleAuth} from '@auth0/nextjs-auth0';


export default handleAuth();

在 Auth0 的 Google 社交连接中,我选中了 Contacts 框,当我使用 Google 登录时,我看到了允许访问我的联系人的预期请求。

使用 googleapis 包,然后我使用 Google 用户的访问令牌调用 google.people.connections.list 方法(据我所知,该方法由 contacts.readonly 范围启用)并从我的主要联系人列表中收到一份人员列表,而不是“其他”联系人列表。

// This is the abstract Google API service config where the user's access token is set
export interface GoogleServiceConfig {
    accessToken: string
}

abstract class AbstractGoogleService {

    protected _config: GoogleServiceConfig

    constructor(config: GoogleServiceConfig) {
        this._config = config
    }
}

export default AbstractGoogleService
// This is the Google Contacts Helper service that extends the above Abstract Service
export default class GoogleContactsService extends AbstractGoogleService {
    // Search for contacts in user's google account and return them as options
    async search(options?: any) {
        const service = google.people({ version: 'v1', headers: {

            // the accessToken is the one fetched from the Google IDP profile provided by the Auth0 management API
            authorization: `Bearer ${this._config.accessToken}`
        }})
        
        return service.people.connections.list({
            resourceName: 'people/me',
            pageSize: 100,
            personFields: 'names,emailAddresses'
        })
    }
}

然而,当我向 Google 提交我的应用范围验证请求时,他们说我只是在请求 https://www.googleapis.com/auth/contacts.other.readonly 范围并且需要修改我的范围验证请求或我的代码。

我很困惑我应该在哪里请求两个不同的 Google 联系人范围,因为看起来检查 Auth0 Social Google 配置中的联系人框确实请求了contacts.readonly范围。

我尝试将两个 Google 作用域放入 [...auth0].ts 中的 handleAuth() 调用中,如此处所示 https://github.com/auth0/nextjs-auth0/blob/main/EXAMPLES.md#access-an-external-api-from-an-api-route 但在登录时收到错误...

access_denied (Service not found: https://www.googleapis.com/auth/contacts.readonly https://www.googleapis.com/auth/contacts.other.readonly)

这是我第一次与 Auth0 和 Google API 集成,所以任何帮助将不胜感激,因为我现在正在兜圈子并且很难做出正面或反面。

谢谢!

我终于能够获得 Google 的批准,并想与其他 Google 的人分享。

要在 Auth0 中选中 Contacts 框时获得批准:

我需要从 Google 请求此范围:

https://www.googleapis.com/auth/contacts

然后让我通过 Google 验证并调用 People API