成功登录后,经过身份验证的用户为空 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。