Laravel重定向失败登录:方法loginUsername不存在

时间:2019-01-02 19:57:01

标签: php laravel laravel-5 laravel-5.6

我正在使用Laravel 5.6,并尝试覆盖sendFailedLoginResponse中的LoginController方法,但是由于凭据不正确,我得到以下错误:

  

方法App \ Http \ Controllers \ Auth \ LoginController :: loginUsername可以   不存在。

我的网站上有两个登录表单(分别位于/home/login上)。我想将所有失败尝试都重定向到/login。这是我的代码:

namespace App\Http\Controllers\Auth;

use App\Http\Controllers\Controller;
use Illuminate\Foundation\Auth\AuthenticatesUsers;

use Illuminate\Http\Request;

class LoginController extends Controller
{
    use AuthenticatesUsers;
    protected $redirectTo = '/home';

    public function __construct()
    {
        $this->middleware('guest')->except('logout');
    }

    protected function sendFailedLoginResponse(Request $request)
    {
        return redirect('login')
            ->withInput($request->only($this->loginUsername(), 'remember'))
            ->withErrors([
                $this->loginUsername() => $this->getFailedLoginMessage(),
            ]);
    }
}

2 个答案:

答案 0 :(得分:1)

在下面的行中,您正在调用loginUsername()方法。

->withInput($request->only($this->loginUsername(), 'remember'))

但是正如您的错误所声明的那样,loginUsername()方法不存在。 因此,您应该声明您的loginUsername()方法,例如:

public function loginUsername() 
{
    return 'email';
}

答案 1 :(得分:1)

最后,我发现我使用了以前的Laravel版本中作为sendFailedLoginResponse作为基础的旧函数实现。

在Laravel 5.3中,AuthenticatesUsers特性没有实现loginUsernamegetFailedLoginMessage函数。

基于5.6代码,以下似乎是最佳解决方案:

protected function sendFailedLoginResponse(Request $request)
{
    throw ValidationException::withMessages([
        $this->username() => [trans('auth.failed')],
    ])->redirectTo('/login');
}