【问题标题】:Laravel Authenticating A User With ConditionsLaravel 使用条件对用户进行身份验证
【发布时间】:2023-03-20 14:55:01
【问题描述】:

我对 Laravel 文档中的 Authenticating A User With Conditions 部分有疑问。

我应该在哪个控制器和方法中插入此条件以使其在整个应用程序中工作。我没完全听懂。 是app/Http/Controllers/Auth/LoginController的构造函数吗?

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1]))
{
    // The user is active, not suspended, and exists.
}

谢谢

【问题讨论】:

  • 在您的路线中应用路线组,like this example。如果您以后需要,您可以在组外拥有公共路线。
  • Laravel 登录控制器使用 AuthenticatesUsers 特征,您可以在其中找到它的实现。看看这个供应商/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php

标签: laravel authentication


【解决方案1】:

这取决于您使用的版本。您链接到 5.0 文档,所以我不确定您是否真的在使用它。

在最近的版本中,您可以覆盖整个 LoginController::login 方法,也可以深入到 LoginController::attemptLogin 方法。这两者实际上都是在 AuthenticateUsers trait 中定义的。


我倾向于以不同的方式处理这个问题。如果用户处于非活动状态或暂停状态,我喜欢向他们显示不同的消息,而不仅仅是一般的失败登录。我更喜欢使用中间件来检查他们的状态并通过有关他们帐户的消息重定向他们。

class CheckActiveMiddleware 
{
    public function handle($request, Closure $next)
    {
        // Check that the user is still active
        if($request->user()->active)
        {
            return $next($request);
        }
        return redirect('/login')->withErrors('Your account has been deactivated.');
    }
}

这还允许您停用仍然登录的用户。由于使用您的方法,选择“记住我”的登录用户仍然可以使用该应用程序,直到他们注销,因为您的检查仅在登录。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-10
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多