Я создаю приложение в Laravel + Vue.js. У меня есть куча готовых представлений, я хотел сделать это SPA, просматривая его, я узнал о аутентификации JWT, но у меня было много проблем с его реализацией, и я нахожу это слишком сложным (вам нужно изменить слишком много вещей в код, много обещаний и прочего, чего я до сих пор не понимаю).

Когда вы впервые создаете приложение в Laravel, вы выполняете команду в консоли, которая автоматически создает модуль входа/регистрации/выхода из системы, есть ли способ реализовать это с помощью Vue (используя маршрутизатор, axios или что-то еще), поэтому я не нужно использовать JWT?

0
pinkWojak 3 Ноя 2019 в 02:02
Пожалуйста, размещайте свои коды здесь.
 – 
Sachith Muhandiram
3 Ноя 2019 в 03:14
С какими частями реализации JWT у вас возникли проблемы? Я бы очень рекомендовал ознакомиться с аутентификацией JWT.
 – 
brice
3 Ноя 2019 в 09:31
Для этого можно использовать паспорт.
 – 
Afraz Ahmad
3 Ноя 2019 в 10:53

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>
0
mamaye 3 Ноя 2019 в 10:40