在Laravel 5.2中修改本机身份验证

时间:2016-01-18 11:03:39

标签: laravel authentication laravel-5.2

我在Laravel 5.2中使用开箱即用的身份验证(使用artisan命令make:auth)。它就像一个魅力。

事情是,我想限制只有活跃用户的登录(deleted_at = NULL)。

然而,当使用软删除时,我无法使用user_id外键检索其他模型(尽管用户已被删除,但我仍然需要访问用户信息)。

什么是好方法?

我提出的一个替代方案是使用" active"布尔列而不是" deleted_at"日期栏。通过这种方式,我可以只使用" active" = TRUE来过滤用户,并且对外键没有任何问题。

在这种情况下,如果"活跃"设置为TRUE?

干杯!

3 个答案:

答案 0 :(得分:3)

Laravel用于在控制器中进行身份验证的特征具有handleUserWasAuthenticated()方法。它检查另一个名为authenticated()的方法(默认情况下未定义),并在完全验证用户并让他们访问您的应用程序之前调用该方法。因此,如果您在自己的 AuthController 中定义此方法,则可以执行任何后验证检查,例如用户是否处于活动状态。

class AuthController
{
    public function authenticated($request, $user)
    {
        if (! $user->is_active) {
            // Throw exception, display error etc.
        }

        return redirect()->intended($this->redirectPath());
    }
}

答案 1 :(得分:1)

您始终可以将任何额外参数传递给Auth::attempt()方法,如下所示:

if (Auth::attempt(['email' => $email, 'password' => $password, 'active' => 1])) {
    // Redirect to required route/url
}

据我所知,你也可以为deleted_at字段做类似的事情。

答案 2 :(得分:1)

在Auth \ AuthController.php中,添加authenticated()函数

use Auth;
class AuthController extends Controller
{
    .
    .
    .

    public function authenticated($request, $user) {
            if (! $user->active) {
                Auth::logout();
                return redirect('login')->withErrors([
                    $this->loginUsername() => 'Your '.$this->loginUsername().' is not active. Please contact Administrators'
                ]);
            }else {
                return redirect()->intended($this->redirectPath());
            }
    }