在我的应用程序中,我使用Laravel 5.3的默认身份验证。我有两个用户可以登录的地方,如果登录失败,我想要重定向到这两个地方中的一个。换句话说,无论用户登录的是什么视图,如果他们提交无效凭据,他们将始终被重定向回一个特定视图,而不是他们提交表单的任何视图。在Laravel 5.1中,看起来可以通过在登录控制器中包含$loginPath变量来实现。在Laravel 5.3中,他们似乎已从文档中删除了该选项,因此我不确定如何处理此问题。
非常感谢任何想法和/或建议。谢谢!
答案 0 :(得分:5)
编辑:我误解了你原来的问题。这已更新。
如果您需要自定义此功能,您可以执行以下操作:
打开App\Http\Controllers\Auth\LoginController
(作为per the docs,这可能是由php artian make:auth
命令生成的,我假设您已经使用过)并添加此内容:
/**
* Get the failed login response instance.
*
* @param \Illuminate\Http\Request $request
* @return \Illuminate\Http\Response
*/
protected function sendFailedLoginResponse(Request $request)
{
return redirect()->to('/the_redirect_location')
->withInput($request->only($this->username(), 'remember'))
->withErrors([
$this->username() => Lang::get('auth.failed'),
]);
}
这将覆盖\Illuminate\Foundation\Auth\AuthenticatesUsers
使用的LoginController
特征中包含的相同方法。 redirect()->to('/the_redirect_location')
是我改变的部分。最初,它是:redirect()->back()
。
如果您选择使用此方法,请务必在LoginController
的顶部添加:
use Lang;
use Illuminate\Http\Request;
答案 1 :(得分:1)
万一有人在寻找Laravel版本5.7
的解决方案。通过将以下sendFailedLoginResponse
方法添加到LoginController
/**
* Get the failed login response instance.
*
* @param \Illuminate\Http\Request $request
* @return \Symfony\Component\HttpFoundation\Response
*
* @throws \Illuminate\Validation\ValidationException
*/
protected function sendFailedLoginResponse(Request $request)
{
throw ValidationException::withMessages([
$this->username() => [trans('auth.failed')],
])
->redirectTo("/the_redirect_location");
}
不要忘记以下导入:
use Illuminate\Validation\ValidationException;
use Illuminate\Http\Request;
注意:此方法与它从Illuminate\Foundation\Auth\AuthenticateUsers
覆盖的方法之间的区别是行->redirectTo("
/the_redirect_location");
/the_redirect_location
是验证失败时要重定向到的URL。
答案 2 :(得分:1)
打开文件 Authenticate.php ,然后为要从中重定向的每条路由更改此方法redirectTo()
失败。
protected function redirectTo($request) {
if (! $request->expectsJson()) {
if ($request->path() == "user/dashboard"){
return route('user.login.form');
} else {
return route('HOME');
}
}
}