登录页登录成功后进入首页,但测试已经登录时候输入登录页跳转测试的时候返回错误
已经登录成功
这时候输入login页面的时候,出下面的图中内容.
中间件代码
declare(strict_types = 1);
namespace appadminmiddleware;
class Auth
{
public function handle($request, Closure $next)
{
//前置中间件
if (empty(session(config("admin.session_admin"))) && !preg_match("/login/", $request -> pathinfo()))
{
return redirect((string) url('login/index'));
}
$response = $next($request);
return $response;
//后置中间件
}
}
Login控制器
namespace appadmincontroller;
use thinkacadeView;
use appcommonmodelmysqlAdminUser as AdminUserModel;
class Login extends AdminBase
{
public function initialize()
{
if ($this -> isLogin())
{
return $this -> redirect(url("index/index"));
}
}
public function index()
{
return View::fetch();
}
//生成MD5加密的用户密码
public function md5()
{
dump(session(config("admin.session_admin")));
//echo md5("admin_roger");
}
//登录页面登录校验
public function check()
{
//首先判断是否为POST请求
if (!$this -> request -> isPost())
{
return show(config("status.error"), "请求验证方式错误");
}
//参数验证TP6验证机制
$username = $this -> request -> param("username", "", "trim");
$password = $this -> request -> param("password", "", "trim");
$captcha = $this -> request -> param("captcha", "", "trim");
$data = [
'username' => $username,
'password' => $password,
'captcha' => $captcha,
];
$validate = new appadminalidateAdminUser();
if (!$validate -> check($data))
{
return show(config("status.error"), $validate -> getError());
}
try {
$adminUserObj = new appadminusinessAdminUser();
$result = $adminUserObj -> login($data);
} catch (Exception $e)
{
return show(config("status.error"), $e -> getMessage());
}
if ($result)
{
return show(config("status.success"), "登录成功");
}
return show(config("status.error"), $validate -> getError());
}
}
AdminBase
namespace appadmincontroller;
use appBaseController;
use thinkexceptionHttpResponseException;
class AdminBase extends BaseController
{
public $adminUser = null;
/**
* 初始化基础控制器
*/
public function initialize()
{
parent::initialize();
// // TODO: 判断是否登录,如果用户的session为空,跳转到登陆页
// if (empty($this -> isLogin()))
// {
// return $this -> redirect(url("login/index"), 302);
// }
}
/**
* 判断用户是否已经登录
* @return bool
*/
public function isLogin()
{
$this -> adminUser = session(config("admin.session_admin"));
if (empty($this -> adminUser))
{
return false;
}
return true;
}
/**
* redirect方法定义
* @param mixed ...$args
*/
public function redirect(...$args)
{
throw new HttpResponseException(redirect(...$args));
}
}
个人感觉是session的问题,登录后获取session信息,感觉也不正常,如图
AdminUser代码
namespace app\admin\business;
use app\common\model\mysql\AdminUser as AdminUserModel;
class AdminUser
{
public function __construct()
{
$this->adminUserObj = new AdminUserModel();
}
public function login($data)
{
$adminUser = $this -> getAdminUserByUsername($data['username']);
if (!$adminUser)
{
throw new \think\Exception("输入的用户名不存在");
}
//验证密码
if ($adminUser['password'] != md5($data['password'] . "_roger"))
{
throw new \think\Exception("密码输入错误");
}
//登录成功后,更新数据库表信息内容
$updateData = [
"last_login_time" => time(),
"last_login_ip" => request() -> ip(),
];
$res = $this -> adminUserObj -> updateById($adminUser['id'], $updateData);
if (empty($res))
{
throw new \think\Exception("登录失败");
}
//记录session
session(config("admin.session_admin"), $adminUser);
return true;
}
public function getAdminUserByUsername($username)
{
//验证用户名
$adminUser = $this -> adminUserObj -> getAdminUserByUsername($username);
if (empty($adminUser) || $adminUser -> status != config("status.mysql.table_normal"))
{
return [];
}
$adminUser = $adminUser -> toArray();
return $adminUser;
}
}