Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 04.08.2018, 01:22
Новичок на форуме
Отправить личное сообщение для olimpset Посмотреть профиль Найти все сообщения от olimpset
 
Регистрация: 04.08.2018
Сообщений: 9

Как вернуть коллбек OpenID (NodeJS + Angular)
На бэкенде (node) реализована авторизация с помощью passport (passport-steam). Как из фронтенд (angular) вызвать страницу авторизации, но так чтобы бы можно было получить ответ. Если делать обычным способом $http.get('/auth/steam), то ошибка, так как Стим должен открываться во вкладке браузера. Но если сделать так: window.location.url = auth/steam, то страница авторизации (Стима) открывается. Но как вернуть результат, что авторизация прошла успешно, когда по GET передаются токены (ответ) обратно сайту, ведь сайт как бы закрывается и связь прерывается, когда во вкладке открывается другой сайт?

Изначальная проблема в том, что нужно отследить что авторизация прошла и res.redirect('/'), но естественно, он не сработает, так как только в фронтенд можно делать переадресацию. Думал это сделать с помощью socket.io на клиенте функция onAuth() и она вызывается, когда пришел ответ OpenID, и уже делает редирект куда нужно. Но это костыль, как мне кажется. Не держать же постоянно конект, только для этого. Помогите, уже неделю с этим мучаюсь, что только не гуглил уже.
Ответить с цитированием
  #2 (permalink)  
Старый 04.08.2018, 08:30
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,134

olimpset,
window.location.url = auth/steam. Далее нода редиректит на steam OpenID. После успешной авторизации будет редирект от steam на указанный мной URL (пусть /auth/steam/return). В req.user хранится пользователь, данные о котором я могу передать на URL res.redirect('/.../#/authcallback)`, который будет обрабатываться Ангуляром. Токен в queryParams например передавать.
То есть схематично: Ангуляр редирект на ноду => нода на steam => steam на ноду => нода на URL, который обрабатываться будет ангуляром.
Ответить с цитированием
  #3 (permalink)  
Старый 04.08.2018, 15:34
Новичок на форуме
Отправить личное сообщение для olimpset Посмотреть профиль Найти все сообщения от olimpset
 
Регистрация: 04.08.2018
Сообщений: 9

Сообщение от destus Посмотреть сообщение
olimpset,
window.location.url = auth/steam. Далее нода редиректит на steam OpenID. После успешной авторизации будет редирект от steam на указанный мной URL (пусть /auth/steam/return). В req.user хранится пользователь, данные о котором я могу передать на URL res.redirect('/.../#/authcallback)`, который будет обрабатываться Ангуляром. Токен в queryParams например передавать.
То есть схематично: Ангуляр редирект на ноду => нода на steam => steam на ноду => нода на URL, который обрабатываться будет ангуляром.
Так и делал, но после того как произойдет return (придет ответ OpenID), res.redirect тупо не срабатывает. Никуда редиректить не хочет. Подозреваю, это angular блочит, так как он разделяет свои роуты (с хэштегом) от роутов backend и их не вызывает. Не знаю как быть. А res.redirect('/#') не работает еще, потому что с сервера нельзя послать хэштег в url в фронтенд. Есть еще какие то варианты?
Ответить с цитированием
  #4 (permalink)  
Старый 04.08.2018, 15:47
Аватар для destus
Профессор
Отправить личное сообщение для destus Посмотреть профиль Найти все сообщения от destus
 
Регистрация: 18.05.2011
Сообщений: 1,134

olimpset,
Не надо никаких других вариантов. Это и есть правильный и работающий вариант. Естественно когда вы делаете редирект на URL .../authcallback, сперва этот запрос обрабатывается нодой. А нода должна послать ваш index.html (точка входа в проект) res.sendFile('path/to/index.html'). Далее уже этот URL будет обрабатываться ангуляровским роутером. И можно не использовать хэштэг, а обычный HTML5 History API (PathLocationStrategy) https://angular.io/guide/router#appe...ser-url-styles
Ответить с цитированием
  #5 (permalink)  
Старый 04.08.2018, 16:15
Новичок на форуме
Отправить личное сообщение для olimpset Посмотреть профиль Найти все сообщения от olimpset
 
Регистрация: 04.08.2018
Сообщений: 9

Сообщение от destus Посмотреть сообщение
olimpset,
Не надо никаких других вариантов. Это и есть правильный и работающий вариант. Естественно когда вы делаете редирект на URL .../authcallback, сперва этот запрос обрабатывается нодой. А нода должна послать ваш index.html (точка входа в проект) res.sendFile('path/to/index.html'). Далее уже этот URL будет обрабатываться ангуляровским роутером. И можно не использовать хэштэг, а обычный HTML5 History API (PathLocationStrategy) https://angular.io/guide/router#appe...ser-url-styles
Спасибо большое, получилось. Нода в роуте return передает res.redirect('/#!/authcallback', {status: true/false}); И Angular уже сам редиректит куда нужно, смотря какой status.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как из функции вернуть не сколько результатов. Telnet Общие вопросы Javascript 1 02.07.2011 20:02
Как вернуть результат callback? yura_remnev jQuery 2 01.07.2011 16:51
Как вернуть default значение элемента ? dimaan777 jQuery 3 15.02.2011 11:51
Как вернуть фокус в окно редактирования? Roman Koff Общие вопросы Javascript 1 02.08.2010 12:35
Подскажите, как вернуть js-скрипт массив Polkan AJAX и COMET 18 30.04.2010 23:30