Привет всем
Объясните, если на сервере (без spa) при использовании passport.js вся логика аунтификации происходит там (редиректы, сохранение токена и тд), то на spa как, я понимаю, так сделать не получится
и всё это придется делать с клиента.
думаю, что можно как-то сделать и через сервер, но это будет не удобно и, наверно, бессмысленно
SPA это и есть клиент. Passport.js вы же на сервере используете? Через него (сервер) лучше всего авторизацию и производить и как результат вносить в таблицу сессий запись. В записи храняться сгенерированный вами токен, айди пользователя и дата создания/обновления записи. И в качестве ответа отдаете на SPA этот токен. На SPA токен сохраняется и добавляется ко всем запросам к серверу. Так при каждом запросе сервер проверяет есть ли в таблице сессий такой токен и если есть обновляет время записи и отдает данные согласно запросу. В монго можно задавать определенным записям время жизни например 2 часа которое будет отсчитываться от времени указанном в записи. Если регулярно приходят запосы, то время обновляется и сессия живет. Если например прошло 2 часа после последней активности, то запись автоматически удаляется и в следующий раз пользователю нужно будет снова авторизироваться. Надеюсь что-то из этого понятно и это есть ответ на ваш вопрос.
уточню вопрос
если делать авторизацию через instagram auth.
в этом случае как можно использовать сервер и
нужен ли он вообще ?
ведь вся суть в редиректах
Скорее всего сначала нужно зарегистрироваться вот тут https://www.instagram.com/developer/ и создать там "приложение" для которого получите айди приложения, секретный ключ, возможно еще что-то. В настройках "приложения" вам нужно будет прописать урл редиректа - страницы вашего приложения на которую будет перенаправлен пользователь после успешной или неуспешной авторизации.
В SPA при клике у вас должен происходить редирект на страницу авторизации Instagram (вероятно в урле или где-то еще должен быть айди вашего "приложения"), после авторизации Instagram редиректит на указанный вами урл добавляя в урл авторизационный код, который на бэкэнде должен быть прочитан, записан.
<Пасспорт>
После отправляется с сервера запрос аксес токена к инстаграмму с этим сохраненным кодом. Получив аксесс токен можно отправить запрос для получения имейла и другой информации инстаграм пользователя. Пасспорт>
После чего найти пользователя в базе пользователей по имейлу и если такого нет, то создать его. Выделенную часть берет на себя пасспорт. На оф. сайте должны быть уже готовые стратегии и для фб и для инстаграмма и для контакта.
В статье по протоколу это называется самой сложной, но и самой надежной схемой авторизации. Увы подробнее я вряд ли смогу описать.