如何将所有访客请求重定向到 Laravel 应用程序中的登录页面?
Posted
技术标签:
【中文标题】如何将所有访客请求重定向到 Laravel 应用程序中的登录页面?【英文标题】:How to redirect all guest requests to login page in Laravel app? 【发布时间】:2016-09-13 13:59:25 【问题描述】:如果他们尝试访问不存在的路由,我想将所有未经授权的用户(也就是未登录的用户)引导到登录屏幕甚至。目前,如果他们尝试访问仅限授权用户的页面,我的设置会成功重定向他们,但如果他们尝试访问不存在的页面,则会引发正常的 404 错误;我希望这些请求也重定向到登录页面。这是我当前的设置:
// for localization purposes, this needs to be outside the localization group
Route::post('login', 'Auth\AuthController@login');
Route::post('register', 'Auth\AuthController@register');
// for localization of auth as well as normal pages
Route::group([
'prefix' => LaravelLocalization::setLocale(),
'middleware' => ['localeSessionRedirect', 'localizationRedirect'],
], function()
// localized auth routes
Route::get('login', 'Auth\AuthController@showLoginForm');
// other localized auth routes...
// if not logged in, redirect to login screen
// (but throws a 404 if route doesn't exist)
Route::group(['middleware' => ['guest']], function()
return view('auth.login');
);
// Auth middleware group
Route::group(['middleware' => ['auth']], function()
// Post-Authentification Routes...
);
);
【问题讨论】:
你使用什么 Laravel 版本? 4和5差别很大,甚至在5.0和5.2之间 【参考方案1】:Laravel 默认抛出 NotFoundHttpException
如果客户端试图访问不存在的路由。
要处理此异常,您需要编辑 render()
下的方法 \app\Exceptions\Handler.php
所以要实现你的目标,你需要有这些步骤
捕捉异常(检查instanceof NotFoundHttpException) 检查用户是否经过身份验证。 如果未通过身份验证,则重定向到“/login”。你会得到这样的东西
public function render($request, Exception $e)
if ($e instanceof \Symfony\Component\HttpKernel\Exception\NotFoundHttpException && !Auth::check())
return redirect('/login');
return parent::render($request, $e);
并继续使用auth
中间件来处理您只需要经过身份验证的用户才能访问的每个路由。
【讨论】:
这正是我所需要的!谢谢! 除了将客人重定向到登录之外,这似乎还将登录用户重定向到登录页面以防 404。我正在尝试找到解决方法但遇到问题,这就是我偶然发现这个问题的原因。似乎 Auth 在出现异常时不起作用,因为路由不匹配并且中间件(StartSession 和 Authenticate)没有运行。 (Laravel 5.3) @Tadej github.com/laravel/laravel/blob/… @Tadej github.com/laravel/framework/blob/…以上是关于如何将所有访客请求重定向到 Laravel 应用程序中的登录页面?的主要内容,如果未能解决你的问题,请参考以下文章
你如何将所有请求重定向到 laravel 5 中的 public/ 文件夹
Laravel 5.2 如何将所有 404 错误重定向到主页