【问题标题】:Laravel 5.1 auth system with statusLaravel 5.1 身份验证系统
【发布时间】:2015-08-21 06:20:02
【问题描述】:

我是 laravel 的新手,我已经集成了内置的身份验证系统并且工作完美。现在我还想在身份验证时考虑用户表的状态字段。我搜索了很多,但找不到将此类功能与内置 laravel 的身份验证系统集成的正确方法。

【问题讨论】:

    标签: php laravel authentication laravel-5.1


    【解决方案1】:

    验证时考虑用户状态很简单。有两种方法可以做到这一点,具体取决于您是手动调用 Auth::attempt() 还是在控制器中使用 AuthenticatesUsersRegistersAndAuthenticatesUsers 特征.

    如果您手动调用 Auth::attempt(),则始终将一组凭据传递给该方法。这些凭据用于从数据库中获取用户。将 status 字段添加到这些凭据中,只有具有给定状态的用户才能登录,例如:

    Auth::attempt([
        'username' => Request::input('username'),
        'password' => Request::input('password'),
        'status'   => 'active'
    ]);
    

    以上将只允许具有 status=active 的用户登录。

    如果您在控制器中使用 AuthenticatesUsersRegistersAndAuthenticatesUsers 特征,则需要覆盖 getCredentials() 方法。此方法应返回您传递给 Auth::attempt() 的相同数组:

     protected function getCredentials(Request $request) {
      return [
        'username' => Request::input('username'),
        'password' => Request::input('password'),
        'status'   => 'active'
      ];
    }
    

    【讨论】:

    • 它有效,谢谢,有没有办法添加类似 ['deleted' => NULL]
    • 并非如此,因为 UserProvider 内部调用 where($field, '=', $value) 不能使用 NULL 值,因为这需要调用 whereNotNull($field)。但是不要自己实现软删除,而是在您的用户模型中使用 SoftDeletes 特征,这将与 Laravel 身份验证一起使用 - 具有 deleted_at 的用户将无法登录。
    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 2014-12-29
    • 2015-09-23
    • 2016-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-09
    相关资源
    最近更新 更多