Laravel 5.3 - 登录尝试重定向失败

时间:2016-10-01 11:54:00

标签: php laravel authentication redirect laravel-5.3

在我的应用程序中,我使用Laravel 5.3的默认身份验证。我有两个用户可以登录的地方,如果登录失败,我想要重定向到这两个地方中的一个。换句话说,无论用户登录的是什么视图,如果他们提交无效凭据,他们将始终被重定向回一个特定视图,而不是他们提交表单的任何视图。在Laravel 5.1中,看起来可以通过在登录控制器中包含$loginPath变量来实现。在Laravel 5.3中,他们似乎已从文档中删除了该选项,因此我不确定如何处理此问题。

非常感谢任何想法和/或建议。谢谢!

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');
    }
  }
}