-1

我正在创建一个使用 Svelte.js 和 Larvel 6 作为后端的应用程序(wewowweb/laravel-svelte-preset)。如何获取表单的 csrf 令牌?表达式@csrf 显示为纯文本。

4

1 回答 1

0

要更新这个问题:使用 Laravel 8 和 Svelte,我只是像这样从 resources/views/auth/register.blade.php 文件中删除了保存表单和 @crf 的所有代码(忽略 Tailwindcss):

@extends('layouts.app')
@section('content')
<form data-register method="POST" action="{{ route('register') }}"
 class="min-h-screen flex items-center justify-center py-12 px-4 sm:px-6 lg:px-8">
  @csrf
  <script src="{{ asset('js/register.js') }}"></script>
</form>
@endsection

如果您希望您的表单完全在 Svelte 中,因此您可以异步执行它或将其绑定到其他组件,您可以只调用 @csrf 本身,而不是表单。然后,您必须将一些代码放入您的 .svelte/.js 文件中,以将 PHP 创建的pre -load 输入移动到 SVELTE 创建的 post -load 的形式中,您就完成了!也许类似于(未经测试,只是猜测并假设表单上有一个数据寄存器属性)

import { onMount } from "svelte"

onMount(() => {
  let token = document.getElementsByName('_token')
  let form = document.querySelector('[data-register] form')
  if(token && form){
    form.appendChild(token[0])
  }
}

我已经测试了 PHP 的方式,就像一个魅力。JS方式一直抛出419错误,所以我基本上只是选择了选项1。

于 2021-08-24T19:13:58.720 回答