Можно ли открыть сборщик Google с токеном доступа, полученным со стороны сервера Oauth2?

Я интегрировал свой диск Google с помощью Oauth2 на стороне сервера и сохранил учетные данные, такие как токен доступа и токен обновления, в базе данных.

        const clientId = `${process.env.GOOGLE_DRIVE_CLIENT_ID}`;
        const clientSecret = `${process.env.GOOGLE_DRIVE_CLIENT_SECRET}`;
        const redirectURI = `${process.env.SERVERHOST}/connect/gdrive`;
        const oAuth2Client = new google.auth.OAuth2(
            clientId,
            clientSecret,
            redirectURI,
        );
        const authUrl = oAuth2Client.generateAuthUrl({
            access_type: "offline",
            scope: SCOPE,
        });
        return res.send({ url: authUrl });

Как только пользователь авторизует приложение, в следующий раз, когда пользователь загрузит средство выбора Google, оно должно быть открыто напрямую без экрана аутентификации. Для этого я извлекаю токен доступа из своей базы данных (если срок его действия истек, я создаю новый токен из токена обновления) и передаю его в сборщик Google.

createPicker(accessToken) {
        const { gdriveOAuth2Token } = this.props.userInfo;
        const appId = '';
            console.log('acc : ', accessToken);
            const uploadView = new google.picker.DocsUploadView();
            var picker = new google.picker.PickerBuilder().
                    addViewGroup(
                            new google.picker.ViewGroup(google.picker.ViewId.DOCS).
                            addView(google.picker.ViewId.DOCUMENTS).
                            addView(google.picker.ViewId.PRESENTATIONS)).
                            addView(uploadView).
                            setAppId(appId).
                            setOAuthToken(accessToken).
                            setDeveloperKey(developerKey).
                            setCallback(this.pickerCallback).
                            build();
            picker.setVisible(true);
    }

Он отлично работает для конкретной сессии. Однако для новых сеансов он снова запрашивает имя пользователя и пароль. Я не хочу, чтобы пользователь проходил через экран аутентификации после того, как он интегрировал свой диск.


person ot954    schedule 06.01.2020    source источник
comment
Как работает ваше приложение? Это на локальном хосте для тестирования или вы работаете на сервере prod?   -  person Rafa Guillermo    schedule 06.01.2020
comment
@RafaGuillermo работает на локальном хосте   -  person ot954    schedule 07.01.2020
comment
Каковы ваши ОБЛАСТИ?   -  person Rafa Guillermo    schedule 08.01.2020
comment
@RafaGuillermo ['googleapis.com/auth/drive.file', 'googleapis.com/auth/userinfo.email'] — мои области действия   -  person ot954    schedule 09.01.2020
comment
Как вы получаете токен доступа? Когда сеанс перезагружается, токен доступа необходимо повторно получить из вашей базы данных, но как вы это идентифицируете? При сбросе сеанса пользователь должен быть снова идентифицирован ... если вы не извлекаете что-то из кеша?   -  person Rafa Guillermo    schedule 09.01.2020
comment
Здравствуйте, @ot954, у меня та же проблема. Как вам удалось решить эту проблему и избежать того, чтобы пользователю приходилось входить в систему снова и снова?   -  person lucianov88    schedule 29.01.2021