我正在使用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(),
]);
}
}
答案 0 :(得分:1)
在下面的行中,您正在调用loginUsername()
方法。
->withInput($request->only($this->loginUsername(), 'remember'))
但是正如您的错误所声明的那样,loginUsername()
方法不存在。
因此,您应该声明您的loginUsername()
方法,例如:
public function loginUsername()
{
return 'email';
}
答案 1 :(得分:1)
最后,我发现我使用了以前的Laravel版本中作为sendFailedLoginResponse
作为基础的旧函数实现。
在Laravel 5.3
中,AuthenticatesUsers
特性没有实现loginUsername
或getFailedLoginMessage
函数。
基于5.6
代码,以下似乎是最佳解决方案:
protected function sendFailedLoginResponse(Request $request)
{
throw ValidationException::withMessages([
$this->username() => [trans('auth.failed')],
])->redirectTo('/login');
}