Как получить и передать JWT на сервер? - PullRequest
0 голосов
/ 01 октября 2018

Я использую React Native Firebase Auth, однако мои профили пользователей фактически хранятся в моей реляционной базе данных.Из-за этого я сопоставил целочисленный идентификатор идентификатора PostgreSQL в Firebase uid =>.(Думая о том, чтобы просто использовать uid для всего, чтобы не усложнять его, вместо того, чтобы сопоставлять его с идентификатором в моем собственном БД)?

В любом случае, когда запускается мое приложение React Native, мой пользователь входит в систему через Firebase, и я получаюответ с информацией типа uid, refresh_token и т. д.

Как мне получить и передать токен этого пользователя на свой внутренний сервер Node.js, чтобы получить его профиль?Это только кажется, что есть refresh_token из ответа аутентификации, который я не должен пропускать.

В настоящее время я просто передаю uid Firebase Auth, передаваемые моему бэкэнд-серверу, предполагая, что это "достаточно безопасно", поскольку они получили его при входе в систему. Этого достаточно?Я чувствую, что должен передать какой-то токен -> декодировать его на сервере -> получить идентификатор?

Если так, как это сделать?

1 Ответ

0 голосов
/ 01 октября 2018

Вы можете использовать getIdToken() для извлечения в настоящий момент зарегистрированных пользователей JWT.Например, на вашем клиенте:

if (firebase.auth().currentUser) {
  const token = await firebase.auth().currentUser.getIdToken();
  // do something with token - e.g. send as a header with your api requests
}

Затем в своем бэкэнд-коде через admin sdk получите заголовок токена и убедитесь, что токен и что пользователь существует, например, для Node Admin SDK и промежуточного программного обеспечения ExpressJS дляэто может выглядеть примерно так:

module.exports = async function (req, res, next) {
  const { token } = req.headers;

  if (!token || !token.length) return next();

  // validate JWT and pluck user id
  const { uid } = await firebase.auth().verifyIdToken(token);
  // find the user based on id
  const user = await firebase.auth().getUser(uid);

  if (user) {
    // keep an instance of the User class on this request
    req._user = user;
    // raw serializable version of the user for request debugging?
    req.user = user.toJSON();
  }
  
  // TODO if (!user) res.send('Unauthorised');

  return next();
};

Для справки;Документы React Native Firebase для этого метода находятся здесь: https://rnfirebase.io/docs/v5.x.x/auth/reference/User#getIdToken

...