Правильное перенаправление на Vue SPA после успешного Oauth с Laravel Passport (неявный токен гранта)

У меня есть бэкэнд Laravel и интерфейс Vue SPA. До сих пор мне удалось заставить работать токены неявного гранта. Моя проблема связана с перенаправлением.

После успешной аутентификации Laravel перенаправляет на http://localhost:8080/auth/callback#access_token=AUTH_TOKEN&token_type= TOKEN_TYPE&expires_in=EXPIRES_IN вместо http://localhost:8080/auth/callback?access_token=AUTH_TOKEN&token_type=TOKEN_TYPE&expires_in= EXPIRES_IN (обратите внимание на # и ?). Я должен вручную ввести правильный URL-адрес после успешной аутентификации.

Как убедиться, что он правильно перенаправляется на правильный URL-адрес?


person Miller Adulu    schedule 14.12.2018    source источник


Ответы (1)


Основываясь на этом ответе на переполнение стека, мне удалось найти обходной путь. Эта функция не является ошибкой и не перенаправляет на myurl.com? не устраняет проблему. Вот мое решение. В моем индексном файле маршрутизатора у меня есть две записи.

Первый — это перенаправление, на которое OAuth API возвращает токен. Метод роутера beforeEnter получает строку URL, заменяет # на ? и следующий метод перенаправляет приложение на маршрут сохранения.

Метод indexOf получает индекс ? во вновь отформатированном URL-адресе и передает его методу подстроки, который усекает часть http(s)://, чтобы это решение можно было адаптировать как к http, так и к https.

В результате усечения получается ?access_token. Затем это добавляется к следующей записи пути к методу, и в результате доступ к реквизиту можно получить из компонента в /save через объект route.query.

{
  path: `/auth/callback`,
  beforeEnter: (to, from, next) => {
    let url = window.location.href
    if(url.includes('#')) {
      let newUrl = url.replace('#', '?');
      next({path: `/save${newUrl.substring(newUrl.indexOf('?'))}`})
    }
    next();
  },
},
{
  path: `/save`,
  component: Auth,
  props: (route) => ({
    access_token: route.query.access_token
  })
},
person Miller Adulu    schedule 18.12.2018