Vue внешний интерфейс, серверная часть Rails и путаница при аутентификации Facebook - PullRequest
0 голосов
/ 09 января 2020

Фон У меня есть два приложения - интерфейс в VueJS и сервер Rails. Я реализовал механизм аутентификации без сохранения состояния, используя камень Knock. Когда пользователь регистрируется / выходит из внешнего интерфейса, сервер отправляет обратно JWT. Теперь внешний интерфейс отправляет все запросы на сервер с JWT в заголовке аутентификации в форме Bearer {JWT}. Это довольно просто и понятно, но теперь я хочу также разрешить пользователям возможность входить через Facebook.

Main Я не хочу, чтобы пользователи перенаправлялись за пределы сайта, если они хотят для входа через FB, поэтому я реализовал FB SDK в своем интерфейсе (отдельный сервер и URL-адрес от внутреннего интерфейса), который выполняет вызов в Facebook и успешно аутентифицирует их на стороне Facebook.

… И это где мой Главная проблема - откуда я go отсюда? Я подумал о трех подходах

  1. Первый попытка, которую я попробовал, состояла в том, чтобы сделать запрос от внешнего интерфейса, а затем установить signed_request в фейсбуке ie `и использовать Omniauth-facebook & Devise проанализировать запрос и оттуда сделать еще один запрос в FB и получить пользовательские данные и создать пользователя. Затем я создаю пользователя и отправляю обратно свой собственный токен JWT (используя Knock) для использования внешним интерфейсом. Это очень странно, так как я уже использую Knock. Мне действительно нужно использовать Devise и здесь?
  2. Другой подход заключается в том, чтобы отправлять только access_token Facebook на сервер и использовать Koala для дополнительных звонков в FB, а затем снова устанавливать собственный токен JWT, который будет возвращен в frontend.
  3. Сделайте запрос аутентификации из внешнего интерфейса, затем сделайте второй запрос в facebook для получения пользовательских данных, отправьте пользовательские данные в бэкэнд для создания нового пользователя и затем создайте свой собственный токен JWT, который получает отправлено обратно во внешний интерфейс - каким будет мой URL обратного вызова в этом случае? Прямо сейчас это на бэкэнде.

Мой основной подход ко всем подходам: 1) Должен ли я использовать свои собственные токены JWT или замена токена доступа FB заменой? 2) Должны ли URL-адреса обратного вызова присутствовать во внешнем интерфейсе или бэкэнде, и имеют ли они какое-либо практическое значение, если я использую только FB для аутентификации? 3) В какой момент я должен проверить, не истек ли токен и где? Фронтенд или Бэкэнд? Если я получу токен, срок действия которого истек, как это сделать? 4) Я хотел бы потребовать от пользователя разрешения на доступ к электронной почте. Должен ли этот «отказ» быть сделан на веб-интерфейсе или бэкэнде, если пользователь не разрешил разрешение электронной почты?

TLDR Я очень смущен тем, какой поток я должен использовать, когда у меня есть интерфейс, бэкэнд и использование аутентификации facebook наряду с моей собственной аутентификацией. Я читал множество онлайн, но это, кажется, только смутило меня, так как многие ресурсы, похоже, либо используют только одно приложение, либо используют аутентификацию facebook, либо являются только приложениями Frontend, использующими что-то вроде Firebase для бэкенда.

Мне очень жаль, что это мини-эссе немного запутано, но это, вероятно, свидетельство того, насколько это меня смутило. Есть ли даже «правильный» подход, или я могу использовать несколько подходов, и они основаны исключительно на личных предпочтениях? Любая помощь, которая может направить меня в правильном направлении, будет очень, очень признательна!

...