使用 nuxtjs 登录 laravel sanctum 后出现 401(未验证)错误
Posted
技术标签:
【中文标题】使用 nuxtjs 登录 laravel sanctum 后出现 401(未验证)错误【英文标题】:Get 401(Unauthenticated) error after login on laravel sanctum with nuxtjs 【发布时间】:2021-09-16 20:00:15 【问题描述】:我已经安装了:
laravelv 7.30.4
nuxtjs v 2.15.7
在我使用 nuxtjs auth 模块登录我的 laravel sanctum 后,当 nuxt 尝试获取用户时,laravel 响应 401 错误(未经身份验证的消息)。
我的网络状态:
我的 cookie 状态:
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 错误的问题在哪里!
【问题讨论】:
您能否通过 Postman 完成这项工作? 【参考方案1】:我遇到了同样的问题,解决方法是将 localhost:8000(laravel 域)添加到 SANCTUM_STATEFUL_DOMAINS
SESSION_DOMAIN=localhost
SANCTUM_STATEFUL_DOMAINS=localhost:8000,localhost:3000
【讨论】:
【参考方案2】:您需要在登录后返回您的api token
。并在您在 laravel 路由中使用middleware('auth:sanctum')
的每个请求中发送它。
更多关于issuing tokens in sanctum的信息
获取用户需要token
,如果没有提供它会抛出 401 错误。
【讨论】:
它不是 api 令牌认证,它是 spa 认证:laravel.com/docs/8.x/sanctum#spa-authentication【参考方案3】:在你的 .env 中你可以添加这个
SESSION_SECURE_COOKIE=false
【讨论】:
【参考方案4】:您是否已将 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 相关
【讨论】:
我先做了 :) 我看到了文档并做了,但它没有用 您是否使用nuxt/auth
包。如果没有,您可以尝试使用它,看看是否可以解决问题? auth.nuxtjs.org/providers/laravel-sanctum 这是另一篇关于其用法的博文swapnil.dev/blog/authentication-in-nuxtjs-using-laravel-sanctum
@OmidRezaHeidari,您是否已经接近解决问题或者您仍然收到 401 错误?
我收到 401 响应了!
@OmidRezaHeidari 你有没有设法解决这个问题?以上是关于使用 nuxtjs 登录 laravel sanctum 后出现 401(未验证)错误的主要内容,如果未能解决你的问题,请参考以下文章