Если вы используете имя пользователя и пароль для первоначального входа в систему, то предполагается, что вы создаете приложение First Party , которое имеет право на попытку входа пользователя / пароль.
Настоятельно рекомендуется, если вы создаете приложение Reactive с помощью Angular, React.js или Vue.js, тогда подход SPA (одностраничное приложение) даст гораздо более надежный продукт.
https://en.wikipedia.org/wiki/Single-page_application
Вы должны заметить, что с помощью этого конкретного метода, если ваше приложение делает статический (без запроса ajax) и, следовательно, перезагружается в браузере, вы потеряете токен аутентификации.В этом случае вы не используете хост для приложения, которое по определению является SPA, поэтому, если вам нужно сохранить токен между статическими перезагрузками запросов, вам нужно сохранить токен в cookie, я предлагаю использовать cookie, а неlocalStorage, поскольку доступность localStorage не гарантируется на 100% в вашем распоряжении во всех веб-браузерах.
Если ваше приложение находится в одном домене, вам не нужно использовать Passport.Вместо этого собственная аутентификация файлов cookie сеанса отлично подходит, все, что вам нужно сделать, это убедиться, что вы передаете токен CSRF для запросов на публикацию.
Для предоставления пользователю / паролю токена вы должны следовать этому руководству: https://laravel.com/docs/5.7/passport#password-grant-tokens
Из этого руководства, когда вы делаете успешный запрос на /oauth/token
, возвращаемый токен должен быть установлен в вашем приложении как заголовок Authorization
с токеном Bearer.
Ответ на запрос токена выглядит следующим образом:
{
"token_type": "Bearer",
"expires_in": 31536000,
"access_token": "eyJ0eXAiOiJKVJhb...nheKL-fuTlM",
"refresh_token": "def502008d6313e...94508f1cb"
}
Вы должны запросить и обработать этот объект JSON следующим образом:
axios.post('/oauth/token', {
grant_type: "password",
client_id: "1",
client_secret: "zkI40Y.......KvPNH8",
username:"email@address.com",
password:"my-password"
}).then( response => {
axios.defaults.headers.common['Authorization'] = `Bearer ${response.data.access_token}`
} );
Значения для client_id (id)и client_secret взято из oauth_clients таблицы, там уже должна быть запись.
Если нет, тогда выполните php artisan passport:client --password
Незабудьте, что вам придется настроить некоторые заголовки, посмотрите на этот пост некоторую соответствующую информацию для заголовка Oauth Authorization : Как отправить заголовок авторизации с помощью axios