在laravel 8中使用与sanctum的Auth检查,是否有效



我的laravel SPA面板中有几个规则似乎不起作用,它们总是返回false,并且不确定这是正确的还是我的逻辑有问题。

我使用Sanctum在Laravel 8中提供验证令牌,但在开始构建刀片父视图文件时,我也添加了一个身份验证检查。

我的问题是laravel-auth((是否与santum一起工作,以及如何使用PHP看到santum是有效的/正在工作的

vue.blade.php

// this will not work when I login
@if (Auth::check())
<script>
window.Laravel = {!!json_encode(['isLoggedin' => true, 'user' => Auth::user()])!!}
</script>
@else
<script>
window.Laravel = {!!json_encode(['isLoggedin' => false])!!}
</script>
@endif

loginControlroller.php

$credentials = [
'email' => $request->email,
'password' => $request->password,
];
if (auth()->attempt($credentials)) {
if (Hash::check($request->password, $user->password)) {
$request->user()->createToken('token_name')->plainTextToken;
return with logic
}
}
}

config/auth.php

'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
'admin' => [
'driver' => 'token',
'provider' => 'users',
],

'auth' => [
'driver' => 'token',
'provider' => 'users',
'hash' => false,
],
],

您有if (!Hash::check($request->password, $user->password))这意味着如果密码和哈希匹配,您将获得false。删除if语句中的!

此外,我不明白你为什么要使用Hash::check(),而你已经用auth()->attempt()验证了用户

你必须尝试这个

$credentials = [
'email' => $request->email,
'password' => $request->password
];


if (Auth::guard()->attempt(['email' => $request->email, 'password' => $request->password])) {
$token = auth()->user()->createToken('token_name')->accessToken;
return response()->json(['token' => $token,'Token Details' => auth()->user()], 200);
} else {
return response()->json(['error' => 'UnAuthorised'], 401);
}

最新更新