Получить токен в функциях Firebase при запросе с носителем авторизации - PullRequest
0 голосов
/ 24 мая 2018

В настоящее время я использую функции Firebase v1.0.3 и Firebase Admin v5.12.1.Кажется, он работает нормально с библиотекой express NodeJS.

Проблема

Однако, когда я попытался защитить запрос, отправив заголовок авторизации:

Authorization: Bearer <token>

На нем не было логов моих токенов.Я не мог видеть слов, которые соответствуют Bearer или Authorization Bearer (что бы то ни было), когда я использовал console.log(request) в моем файле Firebase Functions index.js, чтобы получить token.

Все, что я получил, былоследующее из req.headers при использовании console.log:

{ 'content-length': '0',
  'accept-language': 'en-US,en;q=0.9',
  'accept-encoding': 'gzip, deflate, br',
  referer: 'http://localhost:5000/admin/',
  accept: '*/*',
  'access-control-request-headers': 'authorization,content-type',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
  origin: 'http://localhost:5000',
  'access-control-request-method': 'GET',
  connection: 'close',
  host: 'localhost:5001' 
}

Источники документации

Я прочитал документацию о Образцы функций Firebase:Авторизованные HTTPS Endpoint примеры кодов, и некоторые из них кажутся устаревшими.

firebase.auth().currentUser.getToken()

Например, сейчас:

firebase.auth().currentUser.getIdToken()

Другие библиотеки

Я пытался установить библиотеки, такие как express-authorization-bearer и express-bearer-token, и я все еще не мог поймать idToken.

Мне интересно, это проблема NodeJS или FirebaseФункции выпуска.В настоящее время я использую NodeJS v6.11.4

Вопрос

Как мне перехватить токен внутри функций Firebase, используя Express или любой другой метод, использующий NodeJS?

1 Ответ

0 голосов
/ 31 мая 2018

Авторизация на предъявителя сработала.Вот результаты, когда я console.log(req.headers):

{ 'accept-language': 'en-US,en;q=0.9',
  'accept-encoding': 'gzip, deflate, br',
  referer: 'http://localhost:5000/admin/',
  accept: '*/*',
  'content-type': 'application/json',
  'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.181 Safari/537.36',
  origin: 'http://localhost:5000',
  authorization: 'Bearer something',
  connection: 'close',
  host: 'localhost:5001' }

token в данном случае something

Важные примечания:

  • req.headers.authorization не работает с Назначение нескольких источников , потому что он дает ошибку Cannot set headers after they are sent, но он должен легко работать, разрешая любое происхождение и с cors в качествепромежуточное ПО:

    var cors = require('cors')({origin: true}); app.use(cors);

    В любом случае req.headers.authorization уже защищает его.

  • req.headers.authorization не может быть назначен параметрув противном случае он станет undefined

  • Используя ту же документацию от Авторизованные конечные точки HTTPS , он должен работать полностью, только если cors, cookies с *Плагин 1040 * и req.headers.authorization полностью включены и отправлены на конечную точку firebase-functions.

...