Laravel 5 Override登录功能

问题描述 投票:3回答:3

我正在开发Laravel项目,并尝试从AuthenticatesAndRegistersUsers中覆盖默认的postLogin()。因此,我更新了AuthController并添加了它以覆盖内置登录名,

public function postLogin(Request $request)
{

    $this->validate($request, [
        'email' => 'required|email', 'password' => 'required',
    ]);

    $credentials = $request->only('email', 'password');



    if ($this->auth->attempt($credentials, $request->has('remember')))
    {
        /* Check if the user is Activated */
        $userID = \Auth::user()->id;
        $user = new \App\User;
        $result = $user->isUserActivated($userID);

        if($result[0]->status == 1)
        {
            return redirect()->intended($this->redirectPath());
        }
        else if($result[0]->status == 0)
        {
            Session::flash('alert-danger', 'Your account is not yet Activated.');
            return Redirect::to('auth/login');
        }

    }

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

您可以看到我有$ result [0]->状态,该状态告诉用户是否已激活,如果没有激活,我会将其重定向回auth / login。我试图var_dump($ result [0]-> status);并且它工作正常,也意味着我覆盖它,因为它正在显示它,但是我的问题是与其将其重定向到auth / log,它仍然可以通过,即使状态为0也可以登录。似乎我是我的覆盖不起作用,但是当我var_dump $ result [0]-> status时,它会显示。我错过了什么吗?

php authentication laravel login laravel-5
3个回答
2
投票

我将在postLogin()函数中添加以下第一件事。

       $this->validate($request, [
            'email' => 'required|email', 'password' => 'required',
        ]);

        if ($this->auth->validate(['email' => $request->email, 'password' => $request->password, 'status' => 0])) {
            return redirect($this->loginPath())
                ->withInput($request->only('email', 'remember'))
                ->withErrors('Your account is Inactive or not verified');
        }

状态是用户表中的标志。 0 =无效,1 =有效。因此整个功能如下所示。

public function postLogin(Request $request)
    {
        $this->validate($request, [
            'email' => 'required|email', 'password' => 'required',
        ]);
        if ($this->auth->validate(['email' => $request->email, 'password' => $request->password, 'status' => 0])) {
            return redirect($this->loginPath())
                ->withInput($request->only('email', 'remember'))
                ->withErrors('Your account is Inactive or not verified');
        }
        $credentials  = array('email' => $request->email, 'password' => $request->password);
        if ($this->auth->attempt($credentials, $request->has('remember'))){
                return redirect()->intended($this->redirectPath());
        }
        return redirect($this->loginPath())
            ->withInput($request->only('email', 'remember'))
            ->withErrors([
                'email' => 'Incorrect email address or password',
            ]);
    }

0
投票


0
投票

[尝试通过laracasts进行此讨论。

© www.soinside.com 2019 - 2024. All rights reserved.