关于登录的问题
来源:6-16 登录优化- 控制器业务代码抽离到business层(最新)
十年砍柴mmws
2020-03-27
public function check() {
if(!$this->request->isPost()) {
return show(config("status.error"), "请求方式错误");
}
// 参数检验 1、原生方式 2、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,
];
// halt('ddds');
$validate = new appadminalidateAdminUser();
// halt($validate->check($data));
if(!$validate->check($data)) {
return show(config("status.error"), $validate->getError());
}
// halt('dd');
//if(empty($username) || empty($password) || empty($captcha)) {
//return show(config("status.error"), "参数不能为空");
//}
// 需要校验验证码
//if(!captcha_check($captcha)) {
// 验证码校验失败
//return show(config("status.error"), "验证码不正确");
//}
try {
$result = (new appadminusinessAdminUser())->login($data);
}catch (Exception $e) {
return show(config("status.error"), $e->getMessage());
}
if($result) {
return show(config("status.success"), "登录成功");
} else {
return show(config("status.error"), "登录失败");
}
}
数据验证和login方法都通过了并且提示登录成功
在login方法里面
public function login($data) {
// 常规的做法
$user = $this->getAdminUserByUsername($data['username']);
if(!$user) {
return show(config('status.error'), "不存在该用户");
}
if($user['password'] != md5($data['password']."_singwa_abc")) {
return show(config('status.error'), "输入的密码错误");
}
// 记录session
session('adminUser', $user);
halt(session('adminUser'));
// 设置模拟错误陷阱 比如数据库内容错误等
// 更新表的数据
$res = $this->userModelObj->updateById($user['id'], ["last_login_time" => time()]);
return $res;
}
session(‘adminUser’, $user);数组保存也成功,
但是在跳转时候依然 跳到登录页面
下面是中间件
public function handle($request, Closure $next) {
// dump(preg_match("/login/", $request->pathinfo()));
// halt($request->pathinfo());
if(preg_match("/captcha/",$request->pathinfo())){
return $next($request);
}
// 前置中间件
if(empty(session(config("admin.session_admin"))) && !preg_match("/login/", $request->pathinfo())) {
return redirect((string) url('admin/login/index'));
}
// dump(session(config("admin.session_admin")));
// halt('33');
$response = $next($request);
//if(empty(session(config("admin.session_admin"))) && $request->controller() != "Login") {
/////return redirect((string) url('login/index'));
//}
return $response;
// 后置中间件
}```
这里的session(config("admin.session_admin")为null,之前不是已经存到session里面了吗?为什么又成空值了
在login方法里面我还特意打印了一下
// 记录session
session(‘adminUser’, $user);
halt(session(‘adminUser’));
session都已经开启了
<?php
// 全局中间件定义文件
return [
// 全局请求缓存
// \think\middleware\CheckRequestCache::class,
// 多语言加载
// \think\middleware\LoadLangPack::class,
// Session初始化
\think\middleware\SessionInit::class,
app\admin\middleware\Auth::class,
];
为什么经过中间件的时候session(‘adminUser’)值为null?
写回答
1回答
-
singwa
2020-03-28
看着没错。
你用老师提供的最终代码试试看呢,在慕课网课程git中
https://git.imooc.com/coding-407/tp6/src/master/tp6_mall_php
082020-03-28
相似问题