繁体   English   中英

登录成功后认证用户为null Laravel

[英]Authenticated user is null after successful Login Laravel

我一直在努力创建第二个身份验证以及 Laravel 中的开箱即用身份验证。 我使用了来自artisanmake:auth命令,并使用了我的自定义 model 作为提供程序,还为我的自定义 model 创建了一个防护。 我的问题是用户在成功登录后没有通过身份验证。 换句话说,当我尝试使用以下命令检索用户时: Auth::user()Auth::guard('employee')->user()它只会给我 null ,我不明白为什么会这样。 问题是我得到了正确的重定向,但我不知道它是 session 还是其他任何不起作用的东西? 如果我错了,请纠正我

编辑:

我的员工 model:

    <?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 用户都是 null。

我只是为了测试而尝试在成功重定向后通过dd()在我的 admin.home 视图中访问他。

您需要将身份验证中间件应用于您的路由,以在相关 controller 中使用Auth访问登录用户。

在你的路线上使用这样的东西:

Route::get(your_route_info)->middleware('auth');

使用您目前拥有的东西,您可以进行一些小的调整来解决这个问题。 Auth::guard('employee')->attempt([...])正在尝试登录用户,因此当您进入if块时,用户已经登录,因此您无需从守卫并再次登录。 返回 Responses 时,您不需要调用 Response 的send方法。 这是在响应从 Kernel 出来后处理的; 它是脚本中第一个到最后一个语句index.php ,用于加载您的应用程序:

$response = $kernel->handle(
    $request = Request::capture()
)->send();

如果您仍在中间件堆栈中(如果您在路由操作中,您就是这样)在响应上调用send ,那么您将过早返回标头,将响应内容刷新到客户端并完成请求。 中间件堆栈中的任何其他内容都无法将标头添加到最终将被发送的响应中。 一旦调用send方法,它就不会再次发送标头。 这意味着 StartSession 和 EncryptCookies 中间件添加的 cookies 不会被发送。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM