Что такое подпрограмма Nodejs для «Зарегистрироваться / Войти в Google»? - PullRequest
0 голосов
/ 19 февраля 2020

Я использую Express Nodejs backend + настроил интерфейс React и попытался реализовать функцию «Зарегистрироваться / Войти в Google», но я не понимаю, что хранить в базе данных после аутентификации пользователя , В обычном режиме регистрации с использованием электронной почты я отправляю адрес электронной почты + пароль бэкэнду при регистрации и проверяю, совпадают ли адрес электронной почты и пароль при входе пользователя в систему.

Однако я не знаю, что хранить в БД, если один зарегистрирован в Google. Я уже реализовал часть google auth с google, следуя этому учебнику в интерфейсе, вот мой код:

import * as queryString from 'query-string';

const stringifiedParams = queryString.stringify({
  client_id: 'MY_CLIENT_ID'
  redirect_uri: 'http://localhost:8000/protected_home',
  scope: [
    'https://www.googleapis.com/auth/userinfo.email',
    'https://www.googleapis.com/auth/userinfo.profile'
  ].join(' '), // space seperated string
  response_type: 'code',
  access_type: 'offline',
  prompt: 'consent'
});

const googleLoginUrl = `https://accounts.google.com/o/oauth2/v2/auth?${stringifiedParams}`;

return (
  <a href={googleLoginUrl}>Login with Google</a>
)

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

Также, Можно ли переместить логи c выше в бэкэнд? Так как Google перенаправит обратно на мой redirect_uri, как этот http://localhost:8000/protected_home?code=CODE_IS_HERE, мне нужно браузер, чтобы извлечь информацию в CODE_IS_HERE. Так что кажется невозможным переместить логин логина c в бэкэнд, какое-либо решение?

Ответы [ 2 ]

1 голос
/ 19 февраля 2020

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

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

  1. Войдите в систему с помощью Google.
  2. Получите перенаправление с помощью CODE
  3. Отправить CODE на сервер
  4. Backend получит идентификатор пользователя и электронное письмо с CODE, используя Google API.
  5. Сохранить пользователя и сгенерировать токен.
  6. Отправить токен обратно на ваш веб-интерфейс.
  7. После этого процесс входа или регистрации завершен.
0 голосов
/ 19 февраля 2020

По сути, вы не должны писать его с нуля, так как есть библиотеки, которые имеют дело с Oauth2: Паспорт JS, openid-client , Grant , OAuth2-client- js. Они должны обрабатывать все перечисленные ниже шаги, кроме хранения фактических данных в вашей собственной базе данных.

В целом, при реализации аутентификации oauth2 третьей стороны есть некоторые основные c шаги:

  1. Понять хорошо как работает Oauth2 https://tools.ietf.org/html/rfc6749
  2. Перенаправление на ваш сервер от клиента (реакция)
  3. Запрос авторизации путем перенаправления в Google
  4. Получение кода авторизации, который будет быть добавленным в URL при перенаправлении с Google обратно на ваш сервер
  5. Обмен кода для токена доступа (POST)
  6. Использование токена доступа для получения данных профиля пользователя из Google (POST)
  7. Сохраните данные пользователя, если они еще не существуют в вашей базе данных - теоретически вы можете пропустить эту часть
  8. Создать сеанс / токен и отправить его обратно клиенту (React) - это еще одно перенаправление.

Вы также не можете хранить какие-либо данные пользователя на своем сервере и просто передать токен, полученный от Google, в свое приложение React (клиент), но тогда вам нужно d, чтобы проверить, если он действителен при каждом запросе к вашему серверу. Вот почему проще создать свой собственный токен сеанса и отправить его клиенту.

Есть больше подробностей, так как для начала это довольно топично c, но RFC6749 должен заполнить пробелы.

...