请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

登录成功后,跳转问题

登录页登录成功后进入首页,但测试已经登录时候输入登录页跳转测试的时候返回错误
已经登录成功
图片描述
这时候输入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;

    }


}

正在回答 回答被采纳积分+3

2回答

singwa 2020-04-12 01:26:14

代码发出来看看。

0 回复 有任何疑惑可以回复我~
  • 提问者 China_zr #1
    已经更新问题代码,您帮忙看一下
    回复 有任何疑惑可以回复我~ 2020-04-12 11:19:55
  • singwa 回复 提问者 China_zr #2
    您好。我看您的代码check方法里面,登录成功之后 老师并没有看到 您把数据写入session的操作呢。
    回复 有任何疑惑可以回复我~ 2020-04-12 22:55:30
  • 提问者 China_zr 回复 singwa #3
    更新了AdminUser的代码,记录session是不是在这里更新?就是这一段
     //记录session
            session(config("admin.session_admin"), $adminUser);
    
            return true;
    回复 有任何疑惑可以回复我~ 2020-04-13 14:19:23
慕容4241860 2020-04-11 21:54:01

1.询问问题先贴出代码。2.问题大概率出现在中间件判断登陆之后的跳转 请检查一下代码

0 回复 有任何疑惑可以回复我~
  • 提问者 China_zr #1
    已经更新问题代码,您帮忙看一下
    回复 有任何疑惑可以回复我~ 2020-04-12 11:20:04
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信