成功登录后,经过身份验证的用户为空 Laravel
Authenticated user is null after successful Login Laravel
我一直在努力创建第二个身份验证以及 Laravel 中的开箱即用身份验证。
我使用了 artisan
中的 make:auth
命令,并将我的自定义模型用作提供者,还为我的自定义模型创建了一个守卫。
我的问题是用户在成功登录后未通过身份验证。
所以换句话说,当我尝试使用 Auth::user()
或 Auth::guard('employee')->user()
检索用户时,它只会给我 null,我不明白为什么会这样。
问题是我得到了正确的重定向,但我不知道它是会话还是其他任何不起作用的东西?如果我错了请纠正我
编辑:
我的员工模型:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Angestellter extends Authenticatable
{
use HasFactory;
public $timestamps = false;
protected $table = 'angestellter';
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'friseurkuerzel',
'vorname',
'nachname',
'email',
'password',
'ist_admin',
'erstelldatum',
'friseursalon_id',
];
}
我的守卫配置来自 /config/auth。php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'employee' => [
'driver' => 'session',
'provider' => 'employees',
]
],
我登录用户的 AdminLoginController:
$this->validate($request, $rules);
$remember = $request->get('remember');
if (Auth::guard('employee')->attempt([
'email' => $request->get('email'),
'password' => $request->get('password'),
], $remember)) {
//Authentication passed...
Auth::guard('employee')->login(Auth::guard('employee')->user());
return redirect()->to(route('admin.home'))->send();
}
attempt()
方法成功后,我可以 dd()
我的 Auth 用户:Auth::guard('employee')->user()
但是在重定向之后,无论我dd()
他在哪里,Auth 用户都是空的。
我只是为了测试而尝试在成功重定向后通过 dd()
在我的 admin.home 视图中访问他。
利用您目前拥有的资源,您可以进行一些小的调整来解决这个问题。 Auth::guard('employee')->attempt([...])
正在尝试登录用户,因此当您进入 if
块时,用户已经登录,因此您不需要从守卫处检索他们并再次登录。返回响应时,您不需要在响应上调用 send
方法。这是在 Response 离开内核之后处理的;它是脚本中的第一个到最后一个语句,index.php
,加载您的应用程序:
$response = $kernel->handle(
$request = Request::capture()
)->send();
如果您仍在中间件堆栈中(如果您处于路由操作中,则在中间件堆栈中)在响应上调用 send
,则返回 headers 太早,刷新响应向客户提供内容并完成请求。出路时中间件堆栈中的任何其他内容都不能将 headers 添加到最终将被发送的响应中。一旦 send
方法被调用,它就不会再发送 headers 了。这意味着不会发送 StartSession 和 EncryptCookies 中间件添加的 cookie。
我一直在努力创建第二个身份验证以及 Laravel 中的开箱即用身份验证。
我使用了 artisan
中的 make:auth
命令,并将我的自定义模型用作提供者,还为我的自定义模型创建了一个守卫。
我的问题是用户在成功登录后未通过身份验证。
所以换句话说,当我尝试使用 Auth::user()
或 Auth::guard('employee')->user()
检索用户时,它只会给我 null,我不明白为什么会这样。
问题是我得到了正确的重定向,但我不知道它是会话还是其他任何不起作用的东西?如果我错了请纠正我
编辑:
我的员工模型:
<?php
namespace App\Models;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Illuminate\Database\Eloquent\Factories\HasFactory;
class Angestellter extends Authenticatable
{
use HasFactory;
public $timestamps = false;
protected $table = 'angestellter';
/**
* The attributes that are mass assignable.
*
* @var string[]
*/
protected $fillable = [
'friseurkuerzel',
'vorname',
'nachname',
'email',
'password',
'ist_admin',
'erstelldatum',
'friseursalon_id',
];
}
我的守卫配置来自 /config/auth。php
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'employee' => [
'driver' => 'session',
'provider' => 'employees',
]
],
我登录用户的 AdminLoginController:
$this->validate($request, $rules);
$remember = $request->get('remember');
if (Auth::guard('employee')->attempt([
'email' => $request->get('email'),
'password' => $request->get('password'),
], $remember)) {
//Authentication passed...
Auth::guard('employee')->login(Auth::guard('employee')->user());
return redirect()->to(route('admin.home'))->send();
}
attempt()
方法成功后,我可以 dd()
我的 Auth 用户:Auth::guard('employee')->user()
但是在重定向之后,无论我dd()
他在哪里,Auth 用户都是空的。
我只是为了测试而尝试在成功重定向后通过 dd()
在我的 admin.home 视图中访问他。
利用您目前拥有的资源,您可以进行一些小的调整来解决这个问题。 Auth::guard('employee')->attempt([...])
正在尝试登录用户,因此当您进入 if
块时,用户已经登录,因此您不需要从守卫处检索他们并再次登录。返回响应时,您不需要在响应上调用 send
方法。这是在 Response 离开内核之后处理的;它是脚本中的第一个到最后一个语句,index.php
,加载您的应用程序:
$response = $kernel->handle(
$request = Request::capture()
)->send();
如果您仍在中间件堆栈中(如果您处于路由操作中,则在中间件堆栈中)在响应上调用 send
,则返回 headers 太早,刷新响应向客户提供内容并完成请求。出路时中间件堆栈中的任何其他内容都不能将 headers 添加到最终将被发送的响应中。一旦 send
方法被调用,它就不会再发送 headers 了。这意味着不会发送 StartSession 和 EncryptCookies 中间件添加的 cookie。