使用nuxtjs登录laravel sanctum后出现401(未经身份验证)错误

时间:2021-07-06 07:28:32

标签: php laravel nuxt.js laravel-sanctum nuxt-auth

我已经安装:

  • laravel v 7.30.4
  • nuxtjs v 2.15.7

当我使用 nuxtjs auth 模块登录我的 laravel sanctum 后,当 nuxt 尝试获取用户时,laravel 响应 401 错误(未经身份验证的消息)。

我的网络状态: enter image description here

我的 cookie 状态: enter image description here

api.php

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

nuxt.config.js :

   auth:{
    strategies: {
      'laravelSanctum': {
        provider: 'laravel/sanctum',
        url: 'http://localhost:8000',
        endpoints:{
          login:{
            url:'/login'
          },
          logout:{
            url:'/api/logout'
          },
        },
        user:{
          property:false
        }
      },
    },
    redirect:{
      login: '/auth/login',
      logout:'/',
      home:'/'
    },
    cookie: {
      options: {
        sameSite: 'lax'
      },
    },
  },

LoginController.php :

    public function login(Login $request)
    {
        $user=User::where('phone_number', $request->phone_number)->first();
        if (Hash::check($request->password, $user->password)){
            $request->session()->regenerate();
            return response()->json(null, 201);
        }
        return $this->setStatusCode(422)->respondWithError('password','invalid pasword');
    }

.env :

SESSION_DRIVER=file
SESSION_LIFETIME=120
SESSION_DOMAIN=localhost

SANCTUM_STATEFUL_DOMAINS=localhost:3000

我不知道哪里出了 401 错误!

3 个答案:

答案 0 :(得分:2)

您需要在登录后返回您的 api token。并在您在 Laravel 路由中使用 middleware('auth:sanctum') 的每个请求中发送它。

关于issuing tokens in sanctum的更多信息

获取用户需要 token,如果未提供,则抛出 401 错误。

答案 1 :(得分:1)

我遇到了同样的问题,解决方案是将 localhost:8000(laravel 域)添加到 SANCTUM_STATEFUL_DOMAINS

SESSION_DOMAIN=localhost
SANCTUM_STATEFUL_DOMAINS=localhost:8000,localhost:3000

答案 2 :(得分:0)

您是否已将 EnsureFrontendRequestsAreStateful 添加到应用程序的 app/Http/Kernel.php 文件中的 api 中间件组?

use Laravel\Sanctum\Http\Middleware\EnsureFrontendRequestsAreStateful;

protected $middlewareGroups = [
  ...
  'api' => [
      EnsureFrontendRequestsAreStateful::class, // Add & import this class
      'throttle:60,1',
      \Illuminate\Routing\Middleware\SubstituteBindings::class,
  ],
];

如果您将 sanctum 与 SPA 应用一起使用,则这是必要的。这已被记录为 Installation

另请查看此部分,看看您遇到的问题是否与 CORS in Sanctum

有关