Passport.js / стратегия Google OAuth2 - Как использовать токен при входе в систему для доступа к API - PullRequest
0 голосов
/ 07 июня 2019

Я регистрирую пользователей через свои доменные учетные записи Google, используя passport.js. Это прекрасно работает, но теперь мне нужно дать этому приложению доступ к нескольким API Google (диск, листы и т. Д.).

Когда пользователь входит в систему, в журналах появляется сообщение, из-за которого создается впечатление, что в паспорте есть вся необходимая информация:

info: [06/Jun/2019:21:24:37 +0000] "302 GET /auth/callback?code=** USER ACCESS TOKEN HERE **&scope=email%20profile%20https://www.googleapis.com/auth/drive.file%20https://www.googleapis.com/auth/spreadsheets%20https://www.googleapis.com/auth/userinfo.email%20https://www.googleapis.com/auth/userinfo.profile%20https://www.googleapis.com/auth/drive HTTP/1.1" [46]

Это достигается путем передачи добавленных областей через passport.authenticate (), который предоставляет пользователю «Предоставить доступ к этим вещам из вашей учетной записи Google в это приложение?» экран:

//Initial auth call to Google
router.get('/',
  passport.authenticate('google', {
    hd: 'edmonds.wednet.edu',
    scope: [
      'email',
      'profile',
      'https://www.googleapis.com/auth/drive',
      'https://www.googleapis.com/auth/drive.file',
      'https://www.googleapis.com/auth/spreadsheets'
    ],
    prompt: 'select_account'
  })
);

Однако, когда я иду и пытаюсь вызвать API с чем-то вроде:

const {google} = require('googleapis');
const sheets = google.sheets({version: 'v4', auth});

router.post('/gsCreate', function(req,res,next){

  sheets.spreadsheets.create({
    // Details here.....
  });

});

Я не получаю ничего, кроме ошибок (текущий debug: authClient.request is not a function)

У меня такой вопрос: могу ли я использовать такую ​​настройку, попросив пользователя войти в систему и предоставить разрешения один раз, а затем каким-то образом сохранить это в своем сеансе пользователя через паспорт?

Ответы [ 2 ]

1 голос
/ 10 июня 2019

Я считаю, что вы не можете использовать passport.js для трехстороннего интерфейса для таких API, как Sheets или Drive.

Взгляните на документацию Использование OAuth для веб-серверов.

0 голосов
/ 11 июня 2019

user835611 имеет правильный ответ, так как эта страница объясняет все довольно хорошо. Однако, если вам все еще нужно больше, приведенная ниже ссылка действительно помогла мне понять, как это работает.

https://github.com/googleapis/google-auth-library-nodejs#oauth2

...