Я создаю приложение в Laravel + Vue.js. У меня есть куча готовых представлений, я хотел сделать это SPA, просматривая его, я узнал о аутентификации JWT, но у меня было много проблем с его реализацией, и я нахожу это слишком сложным (вам нужно изменить слишком много вещей в код, много обещаний и прочего, чего я до сих пор не понимаю).
Когда вы впервые создаете приложение в Laravel, вы выполняете команду в консоли, которая автоматически создает модуль входа/регистрации/выхода из системы, есть ли способ реализовать это с помощью Vue (используя маршрутизатор, axios или что-то еще), поэтому я не нужно использовать JWT?
1 ответ
Да, это будет означать создание дополнительного столбца в вашей таблице users
, где вы будете сохранять токены пользователей. Хотя это не оптимально.
Поскольку эти токены необходимы для выполнения запросов GET
, POST
, CREATE
и DELETE
, вам придется добавить token
в качестве второго параметра для всех api
запросов.
Ниже показан пример code
Для моего auth
я использовал аутентификацию по умолчанию, которая поставляется с Laravel
, что означает, что пользователь по умолчанию перенаправляется в файл home.blade.php
, который выглядит следующим образом
@extends('layouts.app')
@section('content')
<App :user='{{ auth()->user() }}'></App>
<!-- The :user has to be accepted as a prop in the App component -->
@endsection
В файле App.vue, который является макетом вашего SPA
, вы можете сделать что-то вроде этого
<template>
<div>
<router-view> </router-view> <!-- for all other components -->
</div>
</template>
<script>
export default {
name: "App",
props: [
'user'
],
components:{
},
created(){
window.axios.interceptors.request.use(
(config) => {
if(config.method === 'get'){
config.url = config.url + '?api_token='+ this.user.api_token;
}else{
config.data = {
...config.data,
api_token: this.user.api_token
}
}
return config;
}
)
}
//to set the api_token globally such that it does not need to be typed in eveywhere, we do it whe the component is created/mounted
//let me know if it helps
}
</script>
<style>
</style>
Для выхода из системы
<router-link to="/logout"> Logout </router-link>
//in your Logout component, you can have something like this
<template>
<div>
</div>
</template>
<script>
export default {
name: 'Logout',
created(){
axios.post('/logout', {})
.finally(err => {
window.location = '/login';
})
}
}
</script>
Похожие вопросы
Новые вопросы
laravel
Платформа Laravel — это веб-инфраструктура PHP с открытым исходным кодом, которая позволяет разработчикам создавать динамические и масштабируемые веб-приложения. Исходный код Laravel размещен на GitHub и выпущен под лицензией MIT.