关于登录的问题

来源: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

0
8
singwa
回复
十年砍柴mmws
我的意思是 我上您云服务器直接看
2020-03-28
共8条回复

全流程开发 TP6.0实战高并发电商服务系统

一课就能掌握TP6.0基础及运用,打造完整高并发的电商后端项目

1473 学习 · 1334 问题

查看课程