开启全局中间件,判断用户是否登陆。只有登陆的路由不使用该中间件验证。如何解决?
需求描述:
框架开启全局中间件,用以判断用户是否登陆.
如果用户没有登陆,跳转至登陆的路由。如果用户登陆,则通过判断用户会员到期时间,判断会员时间是否到期,如果到期则修改用户状态。
当开启了全局中间件时,登陆路由也无法使用。有什么方法可以除登陆路由外,其他路由正常走全局中间件的验证呢?
当前代码及遇到的问题
当开启全局中间件时,登陆的路由会陷入全局中间件的死循环。
check中间件
<?php
declare (strict_types = 1);
namespace app\middleware;
class check
{
/**
* 处理请求
*
* @param \think\Request $request
* @param \Closure $next
* @return Response
*/
public function handle($request, \Closure $next)
{
//
// 判断用户是否到期,如果该用户到期,则修改用户会员信息。返回用户不是会员的信息
// if ($request->param('username')) {
// return redirect('index/think');
// }
// 获取用户session 获取当前时间
$username = session('username');
if (empty($username)) {
return redirect('check/check');
}
// $now = date('Y-m-d h:i:s', time());
// return $next($request);
}
}
定义全局中间件
<?php
// 全局中间件定义文件
return [
// 全局请求缓存
// \think\middleware\CheckRequestCache::class,
// 多语言加载
// \think\middleware\LoadLangPack::class,
// Session初始化
\think\middleware\SessionInit::class,
//开启全局中间件
\app\middleware\check::class,
];
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
两种解决办法:
Admin
命名空间下所有路由需要登录,可以用Route::namespace('Admin')->middleware('check')
统一指定。已解决
在check中间件里添加路由规则。
下面将代码粘贴进来,如果看到代码有觉得可以优化的地方还请不吝赐教!
<?php
declare (strict_types = 1);
namespace app\middleware;
class check
{
}