在做用户信息修改的时候,只有当用户登录之后才能修改,如果没登录的情况下,直接利用地址访问修改信息页面,应当将该用户的请求重定向到登录页面,在这种情况下,可以使用框架中的中间件的概念来达到我们的目的。
中间件可以对请求进行过滤,这里可以利用中间件来验证用户是否登录,如果用户登录则可以继续执行原先想执行的操作,如果没登录则重定向到登录页面,让用户先登录。(类似于门口保安,可以对进入车辆做检查拦截)
自定义中间件
1、创建中间件
通过artisan命令创建一个中间件文件
//php artisan make:middleware <中间件名称>
php artisan make:middleware CheckLog
通过上面的命令可以在app/http/middleware
目录下生成一个CheckLog.php
的文件,在文件中的handle
方法里可以写验证逻辑,针对用户是否登录可以写如下代码:
public function handle($request, Closure $next)
{
//判断用户是否已经登录(用框架自带的Auth类里的check方法)
if (!\Auth::check()) {
return redirect()->route('log'); //没登录时重定向到登录页面
}
return $next($request);
}
2、注册中间件
如果想让上面的中间件产生作用,需要注册中间件。中间件分为三类,全局中间件、中间件组、指定路由中间件,这里使用指定路由中间件的方式
在app/http
目录里的Kernel.php
文件中,在protected $routeMiddleware
属性中定义我们的中间件,以<key> => <中间件文件类>
的方式定义,例:'checklog' => \App\Http\Middleware\CheckLog::class
3、使用中间件
因为构造函数会优先执行,我们可以在想用中间件验证的控制器里添加一个构造函数使用我们的中间件,例:
public function __construct()
{
//$this->middleware('checklog); //这种方式会对该控制器里的所有方法都产生作用
$this->middleware('checklog', [
'only' => ['edit', 'update']
]);
}
可以在使用中间件的时候传入第二个参数,‘only’代表的是对哪些方法其作用,‘except’代表的是除了哪些方法起作用
网友评论