如果用户未登录Laravel,则重定向到登录

时间:2015-02-06 10:35:36

标签: laravel laravel-4 laravel-routing

我是laravel的新手,

我在控制器的__construct中有代码

if(Auth::check())
{
    return View::make('view_page');
}

return Redirect::route('login')->withInput()->with('errmessage', 'Please Login to access restricted area.');

它的工作正常,但我想要的是。将这些编码放在每个控制器中真的很烦人,所以我希望将这个验证身份验证和重定向到一个地方的登录页面,可能在router.phpfilters.php

我已经在论坛和stackoverflow中阅读了一些帖子,并在filters.php中添加了代码,如下所示,但这样做无效。

Route::filter('auth', function() {
    if (Auth::guest())
    return Redirect::guest('login');
});

请帮我解决此问题。

4 个答案:

答案 0 :(得分:28)

Laravel 5.4

使用内置的auth中间件。

Route::group(['middleware' => ['auth']], function() {
    // your routes
});

对于单一路线:

Route::get('profile', function () {
    // Only authenticated users may enter...
})->middleware('auth');

Laravel docs

Laravel 4(原始答案)

已经内置了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 路由中的此条目会将其带到登录页面。

相关问题