【问题标题】:SPA vue frontend and Laravel 7 backend SanctumSPA vue 前端和 Laravel 7 后端 Sanctum
【发布时间】:2020-10-25 06:19:27
【问题描述】:

我使用 Sanctum 创建了一个 vue 和 Laravel Spa,使用 axios 发送请求,但我得到状态 204,当我尝试获取用户信息时,我得到 未验证,我不知道出了什么问题!

这是我的 api.php

Route::middleware('auth:sanctum')->get('/user', function (Request $request) {
    return $request->user();
});

home.vue


<script>
import axios from "axios";
axios.defaults.withCredentials = true;
axios.defaults.baseURL = "http://localhost:8000/";

export default {
  name: "Home",
  methods: {
    login() {
      axios.get("/sanctum/csrf-cookie").then((response) => {
         axios.post('/login',{
           email:'user@user.com',
           password:'123456789'
         })
         .then(response=>{
           console.log(response)
         })
      });
    },
  },
};
</script>

dashboard.vue

<script>
import axios from "axios";
axios.defaults.withCredentials = true;
axios.defaults.baseURL = "http://localhost:8000/";

export default {
 mounted(){
     axios.get("/api/user").then((response)=>{
       console.log(response);
     })
 }
}
</script>

【问题讨论】:

  • 204 不是错误响应,它没有内容响应。究竟是什么错误?
  • 我想知道为什么响应没有内容,当我尝试通过localhost:8000/api/user 获取用户数据时出现错误:请求失败,状态码为 401
  • 因为它的 json 请求登录控制器(laravel 的默认)发送这个响应。这是代码:github.com/laravel/ui/blob/2.x/auth-backend/…
  • 我明白了,但为什么我无法获取用户数据?
  • 这可能是因为不同的来源意味着您的前端和后端域不同或您的前端域不是后端的子域。

标签: laravel vue.js axios


【解决方案1】:

解决了!!! 通过编辑 Providers/RouteServiceProvider.php,将 mapApiRoutes 函数从 middleware(['api']) 更改为 middleware(['web'])

protected function mapApiRoutes()
    {
        Route::prefix('api')
            ->middleware('web')
            ->namespace($this->namespace)
            ->group(base_path('routes/api.php'));
    }

【讨论】:

  • 这行得通!!,您介意分享一下发生这种情况的原因吗。
  • 我对PHP一无所知,所以我猜你只是使用了web中间件而不是api。所以我刚刚从 api 中间件中删除了这一行,它工作了:`\Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful::class` 在Kernal.php 文件中
  • 经过一番挖掘后,该行是必要的,我发现有效的方法是将这些环境变量添加到您的 .env 文件 SESSION_DOMAIN=localhost SANCTUM_STATEFUL_DOMAINS=localhost
猜你喜欢
  • 2023-02-15
  • 2020-08-26
  • 2018-03-20
  • 2022-07-11
  • 2020-06-14
  • 2020-08-16
  • 2021-12-15
  • 2021-01-30
  • 2021-06-19
相关资源
最近更新 更多