我是laravel的新手,
我在控制器的__construct中有代码
if(Auth::check())
{
return View::make('view_page');
}
return Redirect::route('login')->withInput()->with('errmessage', 'Please Login to access restricted area.');
它的工作正常,但我想要的是。将这些编码放在每个控制器中真的很烦人,所以我希望将这个验证身份验证和重定向到一个地方的登录页面,可能在router.php
或filters.php
。
我已经在论坛和stackoverflow
中阅读了一些帖子,并在filters.php
中添加了代码,如下所示,但这样做无效。
Route::filter('auth', function() {
if (Auth::guest())
return Redirect::guest('login');
});
请帮我解决此问题。
答案 0 :(得分:28)
使用内置的auth
中间件。
Route::group(['middleware' => ['auth']], function() {
// your routes
});
对于单一路线:
Route::get('profile', function () {
// Only authenticated users may enter...
})->middleware('auth');
已经内置了laravel。请参阅auth
中的filters.php
过滤器。只需将前过滤器添加到您的路线即可。最好使用一个组并将其包裹在受保护的路径周围:
Route::group(array('before' => 'auth'), function(){
// your routes
Route::get('/', 'HomeController@index');
});
或者对于单一路线:
Route::get('/', array('before' => 'auth', 'uses' => 'HomeController@index'));
要更改重定向网址或发送消息,只需根据自己的喜好编辑filters.php
中的过滤条件。
答案 1 :(得分:2)
为避免代码重复,您可以在中间件中使用它。如果您使用的是 Auth 中的Laravel构建,则可以直接使用给定的 auth
中间件
Route::group(['middleware' => ['auth']], function() {
// define your route, route groups here
});
或者,对于一条路线,
Route::get('profile', function () {
})->middleware('auth');
如果要构建自己的自定义身份验证系统。您应该使用中间件,该中间件将检查用户是否已通过身份验证。要创建自定义中间件,请运行 php artisan make:middleware Middelware_Name_Here
并注册新创建的中间件。
答案 2 :(得分:0)
其他人的答复绝对正确。 此解决方案适用于Laravel 5.4 但是以防万一,如果您有多个应用于路由的中间件,请确保“ auth”中间件排在最后而不是开始。
赞:
Route::prefix('/admin')->group(function () {
Route::group(['middleware' => 'CheckUser', 'middleware' => 'auth'], function() {
});
});
答案 3 :(得分:0)
Route::middleware(['auth'])->group(function () {
Route::get('dashboard','BackendController@dashboard')->name('dashboard');
});
如果用户 [未登录] 尝试访问“受保护”的 URL(在本例中为“仪表板”),则 web.php 路由中的此条目会将其带到登录页面。