Использование AWS Amplify Auth на сервере с настраиваемым хранилищем аутентификации - PullRequest
0 голосов
/ 23 мая 2019

У меня есть приложение реагирования на стороне сервера, которое вызывает метод Amplify Auth.CurrentAuthenticatedUser для проверки подлинности перед отображением защищенных страниц.
На стороне клиента я использую cookieStorage. Он прекрасно работает, так как учетные данные успешно извлекаются при вызове Auth.CurrentAuthenticatedUser при доступе к защищенным маршрутам через BrowserRouter маршрутизатора реакции-маршрутизатора.
На стороне сервера (когда доступ к защищенным маршрутам осуществляется прямым HTTP-вызовом), я использую следующую конфигурацию для Amplify:

import cookie from 'cookie';

class ServerCookieStorage {
  constructor(requestCookie) {
    this.cookieObj = {};
    if (requestCookie) this.cookieObj = cookie.parse(requestCookie);
  }
  setItem(key, value) {
    this.cookieObj[key] = value;
  }
  getItem(key) {
    return this.cookieObj[key];
  }
  removeItem(key) {
    this.cookieObj[key] = '';
  }
}

Amplify.configure({
  Auth: {
    identityPoolId: 'placeholder',
      region: 'placeholder',
      userPoolId: 'placeholder',
      userPoolWebClientId: 'placeholder',
      storage: new ServerCookieStorage(event.headers.Cookie);
      //cookie header in aws lambda functions is located in event.header.Cookie
  }
});

Я зарегистрировал то, что входит в методы setItem и getItem, и кажется, что он получает всю информацию нормально, когда вызывается метод Auth.CurrentAuthenticatedUser, однако метод завершается с ошибкой Not Authenticated.

Я что-то здесь упускаю?

1 Ответ

0 голосов
/ 24 мая 2019

Я понял, что Auth.CurrentAuthenticatedUser использует метод fetch под капотом, поэтому он терпел неудачу. Решением было предоставить fetch метод polyfill для узла, использующего node-fetch, я сделал это так:

const fetch = require('node-fetch');
global.fetch = fetch;
...