Comment ajouter _token csrf globalement sur Laravel Inertia ?
P粉608647033
P粉608647033 2023-12-10 20:51:46
0
1
545

J'ai un projet utilisant Laravel Inertia et Vue Js. J'ai des problèmes avec les jetons csrf ces jours-ci. J'ai lu la documentation ici https://inertiajs.com/csrf-protection, alors je devrais peut-être ajouter le jeton csrf à chaque demande/réponse d'inertie.

Ma question est la suivante : comment ajouter ce _token globalement ? Je n'ai donc pas besoin d'ajouter des jetons à mon fichier vue un par un car il contient trop de fichiers.

Mon code de script actuel sur login.vue :

props: {
        errors: Object,
        session: Object,
        auth: Array
    },

    //define composition API
    setup(props) {
        //define form state
        const form = reactive({
            email: '',
            password: '',
        });

        //submit method
        const submit = () => {

            //send data to server
            Inertia.post('/login', {

                //data
                email: form.email,
                password: form.password,
                _token: props.auth.csrf
            });
        }

Mon HandleInertiaRequest (middleware) :

<?php

namespace AppHttpMiddleware;

use IlluminateHttpRequest;
use InertiaMiddleware;

class HandleInertiaRequests extends Middleware
{
    /**
     * The root template that's loaded on the first page visit.
     *
     * @see https://inertiajs.com/server-side-setup#root-template
     * @var string
     */
    protected $rootView = 'app';

    /**
     * Determines the current asset version.
     *
     * @see https://inertiajs.com/asset-versioning
     * @param  IlluminateHttpRequest  $request
     * @return string|null
     */
    public function version(Request $request): ?string
    {
        return parent::version($request);
    }

    /**
     * Defines the props that are shared by default.
     *
     * @see https://inertiajs.com/shared-data
     * @param  IlluminateHttpRequest  $request
     * @return array
     */
    public function share(Request $request): array
    {
        return array_merge(parent::share($request), [
            //session
            'session' => [
                'status'    => fn () => $request->session()->get('status'),
                'success'   => fn () => $request->session()->get('success'),
                'error'     => fn () => $request->session()->get('error'),
            ],
            //user authenticated
            'auth' => [
                'user'          => $request->user() ?   $request->user() : null,
                'permissions'   => $request->user() ? $request->user()->getPermissionArray() : [],
                'csrf' => $request->session()->token()
            ],
            //route
            'route' => function () use ($request) {
                return [
                    'params' => $request->route()->parameters(),
                    'query' => $request->all(),
                ];
            },
        ]);
    }
}


P粉608647033
P粉608647033

répondre à tous(1)
P粉794851975

Ajoutez le jeton csrf globalement dans votre Middleware/HandleInertiaRequests.php fichier.

/**
 * Defines the props that are shared by default.
 *
 * @see https://inertiajs.com/shared-data
 * @param  \Illuminate\Http\Request  $request
 * @return array
 */
public function share(Request $request): array
{
    return array_merge(parent::share($request), [
          'csrf_token' => csrf_token(),
    ]);
}

Ajoutez des instances à votre formulaire.

<input type="hidden" name="_token" :value="this.$page.props.csrf_token">

Enfin, passez l'appel, dans l'exemple ci-dessous, j'utilise la fonction Inertia useForm() pour connecter l'utilisateur.

<script setup>
  import { useForm } from '@inertiajs/vue3'

  const form = useForm({
    email: String,
    password: String,
    _token: String,
    processing: false,
  });

  let submit = () => {
    form.processing = true
    
    form.post('/login')
  }
</script>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!