如何在现有默认身份验证上使用Laravel创建自定义身份验证

时间:2017-04-15 09:23:10

标签: php mysql laravel

我正在完成我的工作,但我的客户需要更多关于管理用户的功能,例如暂停帐户或冻结帐户,我非常确定可以通过以下方式轻松完成:{ {3}},但我已经使用默认的php artisan make:auth身份验证。我的问题是,在用户登录时可以添加更多检查,如if active == true或类似的东西?谢谢!

3 个答案:

答案 0 :(得分:2)

你可以自己覆盖现有的登录功能:

public function postLogin(Request $request)
{
    $this->validate($request, [
        'email' => 'required|email', 'password' => 'required',
    ]);

    $credentials = $this->getCredentials($request);

    // This section is the only change
    if (Auth::validate($credentials)) {
        $user = Auth::getLastAttempted();
        if ($user->active) {
            Auth::login($user, $request->has('remember'));
            return redirect()->intended($this->redirectPath());
        } else {
            return redirect($this->loginPath()) // Change this to redirect elsewhere
                ->withInput($request->only('email', 'remember'))
                ->withErrors([
                    'active' => 'You must be active to login.'
                ]);
        }
    }

    return redirect($this->loginPath())
        ->withInput($request->only('email', 'remember'))
        ->withErrors([
            'email' => $this->getFailedLoginMessage(),
        ]);

}

您也可以根据需要进行修改。

由于

答案 1 :(得分:2)

在laravel 5.4中,您可以使用authenticated的{​​{1}}帖子登录挂钩进行自定义验证。

AuthenticatesUsers

答案 2 :(得分:2)

将此功能放入LoginController

public function postLogin(Request $request)
{
    $credentials = $request->only('email', 'password');
    $user=User::whereEmail($credentials['email'] )->first();
    if (!empty($user) && $user->active) {
        if (Auth::attempt($credentials)) {
            return redirect()->intended($this->redirectPath());
        } else {
            return redirect($this->loginPath())
                ->withInput($request->only('email', 'remember'))
                ->withErrors(['email' => $this->getFailedLoginMessage()]
                );
        }
    } else {
        return redirect($this->loginPath())
            ->withInput($request->only('email', 'remember'))
            ->withErrors(['email' => $this->getFailedLoginMessage()]
            );
    }
}

public function loginPath()
{
    return property_exists($this, 'loginTo') ? $this->redirectTo : '/login';
}


protected function getFailedLoginMessage()
{
    return Lang::has('auth.failed')
        ? Lang::get('auth.failed')
        : 'set here your custom message.';
}
相关问题