使用Laravel Auth中间件

时间:2015-08-23 08:30:07

标签: php laravel authentication middleware laravel-5.1

Laravel 5.1真的有很少的文档.. 我需要清楚了解如何使用Auth middileware保护路由..

文档告诉添加“middleware”=>路由的“auth”参数。 或者可以做到

    public function __construct() 
    {
      $this->middleware('auth');
    }

但是如何使用Auth中间件进行实际用户身份验证并自动重定向到受保护路由的/登录?

3 个答案:

答案 0 :(得分:12)

在Kernel.php中 - 在受保护的$ routeMiddleware下有注册的中间件,如下所示:

public Set<Thing> downloadEverything(Directory directory) {
    Set<Thing> result = new HashSet<>();
    downloadEverything(directory, result);
}

private void downloadEverything(Directory directory, Set<Thing> result) {
    for (File file : getFilesOfDirectory() {
        result.add(downloadThingFromFile(file));
    }
    for (Directory subDirectory : getSubdirectoriesOfDirectory(directory) {
        downloadEverything(subDirectory, result);
    }
}

private Thing downloadThingFromFile(File file) {
    // ...
}

您可以看到'auth'已注册使用App \ Http \ Middleware \ Authenticate。

然后你可以按照这条路径 - 如果你打开 /app/Http/Middleware/Authenticate.php , 你会发现公共功能句柄:

/**
 * The application's route middleware.
 *
 * @var array
 */
protected $routeMiddleware = [
    'auth' => 'App\Http\Middleware\Authenticate',
    'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
    'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
];

这里是管理重定向的地方,您可以根据自己的需要对其进行修改,也可以创建自定义中间件。

最后 - 因为它是在文档中编写的 - 在控制器中,需要进行身份验证,您将添加

    /**
     * Handle an incoming request.
     *
     * @param  \Illuminate\Http\Request  $request
     * @param  \Closure  $next
     * @return mixed
     */
    public function handle($request, Closure $next)
    {
        if ($this->auth->guest())
        {
            if ($request->ajax())
            {
                return response('Unauthorized.', 401);
            }
            else
            {
                return redirect()->guest('auth/login');
            }
        }

        return $next($request);
    }

如果提供的中间件不符合您的需求,您可以创建它。

答案 1 :(得分:6)

在laravel 5.2上如果你想隐藏注册表单或登录表单视图,你应该使用你的中间件:

$this->middleware('mymiddleware', ['only' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]);

OR

$this->middleware('mymiddleware', ['except' => ['register', 'showRegistrationForm', 'login', 'showLoginForm']]);

这是因为注册和登录路由是AuthController上的post方法,而showXxxxForm是表单视图。

希望它可以帮助任何人。

答案 2 :(得分:0)

在Laravel中,中间件用于一些路由只有用户登录才能访问,否则会重定向到登录页面。

Auth::routes();
Route::middleware(['auth'])->group(function () {
//After Login the routes are accept by the loginUsers...

}
Route::middleware(['admin'])->group(function(){
//the Admin is logged in to access the Routes...
}