我已经安装:
v 7.30.4
v 2.15.7
当我使用 nuxtjs auth 模块登录我的 laravel sanctum 后,当 nuxt 尝试获取用户时,laravel 响应 401 错误(未经身份验证的消息)。
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 错误!
答案 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
有关