文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

php使用jwt作登录验证

2023-09-14 07:14

关注

1 在项目根目录下,安装jwt

composer require firebase/php-jwt

2 在登录控制器中加入生成token的代码

use Firebase\JWT\JWT;use Firebase\JWT\Key;class Login extends Cross{        public function index(Request $request)    {        try{            validate(LoginValidate::class)->scene('login')->check($this->request->param());            $params = $request->param();            $db = new UserModel();            $result = $db->where("username='{$params['username']}' AND password='{$params['password']}'")->find();            if(!empty($result)){                $key = '!@#$%*&';         //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当于加密中常用的 盐  salt                $token = array(                    "iss" => $key,        //签发者 可以为空                    "aud" => '',          //面象的用户,可以为空                    "iat" => time(),      //签发时间                    "nbf" => time() + 3,  //在什么时候jwt开始生效  (这里表示生成100秒后才生效)                    "exp" => time() +200, //token 过期时间                    "user_id" => $result['id']       //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对                );                $jwt = JWT::encode($token, $key, 'HS256');                $this->response(200,"登录成功",['token'=>$jwt]);            }else{                $this->response(401,"用户名或者密码错误");            }        }catch (Exception $exception){            return $this->response(400,"请输入完整的信息",$exception->getMessage());        }    }    }

 可以看到返回token

3  创建一个checkToken类进行解密

header('token');        if(empty($token)){            $this->response(300,"你还没有登录");        }        try {            JWT::$leeway = 60; //当前时间减去60,把时间留点余地            $key = new Key($key, 'HS256');            $decoded = JWT::decode($token, $key); //HS256方式,这里要和签发的时候对应            $arr = (array)$decoded;            $this->user_id= $arr['user_id'];        } catch (Firebase\JWT\SignatureInvalidException $e) { //签名不正确            $this->response(301,"签名不正确");        } catch (Firebase\JWT\BeforeValidException $e) { // 签名在某个时间点之后才能用            $this->response(301,"token失效");        } catch (Firebase\JWT\ExpiredException $e) { // token过期            $this->response(301,"token失效");        } catch (Exception $e) { //其他错误            $this->response(301,"未知错误");        }    }}

 所有需要登录操作的接口,都继承这个类

response(200,'成功',$this->user_id);    }}

 在前端请求拦截器中,将获得的token设置为请求头

 即可看到打印出来了用户id

来源地址:https://blog.csdn.net/2201_75783276/article/details/132722115

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯