Laravel基于Auth

时间:2019-09-24 20:29:22

标签: laravel routing laravel-5.8

我有一个Laravel路由文件(web.php),如下所示:

Route::group(['middleware' => ['auth']], function () {
        Route::get('/',  function () {
            return 'Hello World';
        });

});




Route::get('/', 'Auth\LoginController@showLoginForm')->name('login');

在我的应用程序中,未经身份验证的主页必须转到登录屏幕。通过身份验证后,主页会更改。但是,如果我运行此代码并登录-我将获得无限重定向,因为LoginController包含以下行:

protected $redirectTo = '/';

因此,基本上,就算Laravel should read the routes file top to bottom,这似乎也不适用于我(可能是因为::group())或我做错了。

我如何完成转到登录表单的首页,同时又将身份验证的用户重定向回相同的URL(/),以使用不同的身份验证视图(并且没有重定向循环)。

谢谢!

2 个答案:

答案 0 :(得分:0)

我将在guest中间件中处理此问题,该中间件检查经过身份验证的用户。对于这种情况,您首先需要经过身份验证的警卫检查:

use Illuminate\Contracts\Auth\Guard;

public function __construct(Guard $auth)
{
    $this->auth = $auth;
}

public function handle($request, Closure $next)
{
    if ($this->auth->check()) {
        return redirect('/home');
    }

    return $next($request);
}

guest中间件应用于登录端点:

Route::get('/', 'Auth\LoginController@showLoginForm')
->middleware('guest')
->name('login');

注意:仅将guest中间件应用于访客路由,否则将存在重定向循环的风险。

答案 1 :(得分:0)

您为什么不处理此问题?

您可以简单地从web.php中删除路由声明之一。 然后继续进行条件渲染。

@auth
 Show Home page
@endauth

@guest
Show Login
@endguest

我猜中间件不会阻止请求到达路由, 而是阻止请求通过。

您不能使用中间enter code here软件来确定要命中的路线,从而造成循环。 当您考虑自下而上的处理时,laravel已经注册了每个声明的路径。