laravel 首页“无内容”(204“无内容”)

qqrboqgw  于 2023-01-21  发布在  其他
关注(0)|答案(4)|浏览(117)

Laravel sancutum对我来说有点头痛,因为我花了几个小时试图找出为什么sanctum/csrf-cookie路由返回没有内容。最初相同的路由返回404没有找到,但添加'prefix' => 'api/sanctum'config/sancutum. php后,它似乎工作,除了它什么也不输出,没有cookie设置在我的浏览器中。
"这是我的一些密码"

  • .环境*
SANCTUM_STATEFUL_DOMAINS=localhost:8080
SPA_URL=http://localhost:8080
SESSION_DOMAIN=localhost
  • --配置文件/相关文件php*
'paths' => [
        'api/*',
        'login',
        'logout',
        'register',
        'user/password',
        'forgot-password',
        'reset-password',
        'sanctum/csrf-cookie',
        'user/profile-information',
        'email/verification-notification',
      ],

    'allowed_methods' => ['*'],

    'allowed_origins' => ['*'],

    'allowed_origins_patterns' => [],

    'allowed_headers' => ['*'],

    'exposed_headers' => [],

    'max_age' => 0,

    'supports_credentials' => true,
    • axios **
export const authClient = axios.create({
  baseURL: process.env.VUE_APP_API_URL,
  withCredentials: true, // required to handle the CSRF token
});

做了所有这些之后,如果我尝试使用

axios.get('/sanctum/csrf-cookie').then(response => {
    // Login...
});

我得到204 no content响应我也已经添加了api中间件在kernel.php中作为指示在docmentation,但仍然不会设置cookie.当我尝试使请求到另一个路由保护的sancutum i 419 token mismatch.我也已经运行了一个新安装的laravel,php artisan optimize,清除我的浏览器历史,检查端点在postman,但仍然是相同的204 and 419异常

k97glaaz

k97glaaz1#

我在同一个问题上挣扎了好几天,然后找到了一种有效的方法。所以:
'/sanctum/csrf-cookie'路由成功时返回204响应,然后您必须发送带有凭据的post请求。我曾经获得419响应状态。
所以在遵循laravel docs之后,这里是我补充的:

  1. SPA确保将withCredentials标头设置为true
    1.美国石油协会
    .环境
SESSION_DRIVER=cookie
SESSION_DOMAIN='.localhost'
SANCTUM_STATEFUL_DOMAINS='localhost,127.0.0.1'

.kernel.php
添加到中间件阵列中:\Illuminate\Session\Middleware\StartSession::class

wh6knrhe

wh6knrhe2#

嘿,我不知道你是否找到了答案,但是那个请求意味着有一个空的响应体,你的CSRF令牌在响应的头中是可用的;D级

qgelzfjb

qgelzfjb3#

来自HTTP规范:
HTTP 204“无内容”成功状态响应代码指示请求已成功,但客户端不需要导航离开其当前页面。例如,在为Wiki网站实现“保存并继续编辑”功能时,可能会使用此响应代码。
根据规范204是期望的来自服务器的响应。

icnyk63a

icnyk63a4#

可以插入bootstrap.js文件

import axios from 'axios';
window._ = _;

window.axios = axios;
window.axios.defaults.baseURL = "/api/";
window.axios.defaults.headers.common['X-Requested-With'] = 'XMLHttpRequest';

相关问题