Laravel - 如果用户未经过身份验证,如何重定向到登录

Cai*_*aki 10 php authentication laravel laravel-5 laravel-5.1

我正在尝试使用__constructor扩展类(AdminController扩展AdminBaseController),但显然它不起作用,我不知道它可以是什么,在这里你可以看到我的两个类:

AdminBaseController.php

class AdminBaseController extends Controller
{
    public function __construct(){
        if (!Auth::user()){
            return view('admin.pages.login.index');
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

AdminController.php

class AdminController extends AdminBaseController
{
    public function __construct(){
        parent::__construct();
    }

    public function index()
    {
        return view('admin.pages.admin.index');
    }

    public function ajuda()
    {
        return view('admin.pages.admin.ajuda');
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑


这是我的admin路线组:

Route::group([
    'prefix' => 'admin',
    'middleware' => 'auth'
], function () {
    Route::get('/', 'Admin\AdminController@index');

    Route::get('login', 'Admin\AuthController@getLogin');
    Route::post('login', 'Admin\AuthController@postLogin');
    Route::get('logout', 'Admin\AuthController@getLogout');

    Route::group(['prefix' => 'configuracoes'], function () {
        Route::get('geral', 'Admin\AdminConfiguracoesController@geral');
        Route::get('social', 'Admin\AdminConfiguracoesController@social');
        Route::get('analytics', 'Admin\AdminConfiguracoesController@analytics');
    });

    Route::get('ajuda', 'Admin\AdminController@ajuda');
});
Run Code Online (Sandbox Code Playgroud)

Mop*_*ppo 14

控制器不是检查用户是否经过身份验证的正确位置.你应该使用中间件.要获取有关中间件检查的信息,请访问此处

让我们看看如何使用默认的Laravel auth中间件来实现此目的:

首先摆脱你的AdminBaseController只使用AdminController

然后,您必须检查auth文件中是否启用了中间件app\Http\Kernel.php

你应该有这条​​线:

protected $routeMiddleware = [
    'auth' => \App\Http\Middleware\Authenticate::class,
Run Code Online (Sandbox Code Playgroud)

这意味着中间件是活动的并且可用于您的路由.

现在让我们进入中间件类app\Http\Middleware\Authenticate.php来指定中间件的行为:

//this method will be triggered before your controller constructor
public function handle($request, Closure $next)
{
    //check here if the user is authenticated
    if ( ! $this->auth->user() )
    {
        // here you should redirect to login 
    }

    return $next($request);
}
Run Code Online (Sandbox Code Playgroud)

现在唯一要做的就是决定应该应用中间件的路由.假设您有两条路径只能从经过身份验证的用户访问,您应该指定以这种方式使用这两条路由的中间件:

Route::group( ['middleware' => 'auth' ], function()
{
    Route::get('admin/index', 'AdminController@index');
    Route::get('admin/ajuda', 'AdminController@ajuda');
});
Run Code Online (Sandbox Code Playgroud)