php使用jwt作登录验证

这篇具有很好参考价值的文章主要介绍了php使用jwt作登录验证。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

composer require firebase/php-jwt

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

use Firebase\JWT\JWT;
use Firebase\JWT\Key;
class Login extends Cross
{
    /**
     * 显示资源列表
     *
     * @return \think\Response
     */
    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

php使用jwt作登录验证,php,开发语言

3  创建一个checkToken类进行解密

php使用jwt作登录验证,php,开发语言

<?php

namespace app\api\controller;
use think\Controller;
use think\Request;
use app\api\controller\Cross;
use Firebase\JWT\JWT;
use Firebase\JWT\Key;
use Firebase\JWT\SignatureInvalidException;
use Firebase\JWT\BeforeValidException;
use Firebase\JWT\ExpiredException;
use think\Exception;
class CheckToken extends Cross
{
    protected $user_id;
    protected function initialize()
    {
        parent::initialize(); // TODO: Change the autogenerated stub
//        解密token,存储用户id;
        $key = '!@#$%*&';
        $token =  request()->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 (SignatureInvalidException $e) { //签名不正确

            $this->response(300,"签名不正确");
        } catch (BeforeValidException $e) { // 签名在某个时间点之后才能用
            $this->response(301,"登录失效,请重新登录");

        } catch (ExpiredException $e) { // token过期

            $this->response(301,"登录失效,请重新登录");
        } catch (Exception $e) { //其他错误
            $this->response(300,"未知错误");
        }
    }
}
 所有需要登录操作的接口,都继承这个类

php使用jwt作登录验证,php,开发语言

<?php

namespace app\api\controller;

use app\api\controller\CheckToken;
use think\Controller;
use think\Request;

class Home extends CheckToken
{
    public function index(){
        $this->response(200,'成功',$this->user_id);
    }
}
 在前端请求拦截器中,将获得的token设置为请求头

php使用jwt作登录验证,php,开发语言

php使用jwt作登录验证,php,开发语言

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

php使用jwt作登录验证,php,开发语言文章来源地址https://www.toymoban.com/news/detail-697101.html

到了这里,关于php使用jwt作登录验证的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Springboot整合JWT完成验证登录

    这个Java类是一个工具类,用于生成和验证JSON Web Tokens(JWT)。JWT是一种开放标准(RFC 7519),它定义了一种紧凑且自包含的方式,用于在各方之间作为JSON对象安全地传输信息。这个信息可以被验证和信任,因为它是数字签名的。在这个例子中,使用了Java的jsonwebtoken库。 下面

    2024年02月09日
    浏览(33)
  • JWT登录验证前后端设计与实现笔记

    配置全局前置路由守卫 axios拦截器 登录页面和主页 JWT的封装 登录接口 中间件放行 mysql数据库的连接 配置全局前置守卫,如果访问的是登录页面则放行,不是则进入判断是否有token,没有则拦截回到登录页面,有则放行访问。 配置响应拦截器,拿到后端传来的token并保存到

    2024年02月21日
    浏览(27)
  • Spring boot框架 JWT实现用户账户密码登录验证

    目录 1、JWT定义 1、1 JWT工作流程 1、2 JWT优点 2、添加依赖项到pom.xml  3、创建用户实体类  4、实现认证服务 5、登录请求处理 6、生成JWT JWT(JSON Web Token)是一种用于在网络应用间传递信息的安全传输方式。它是一种紧凑且自包含的方式,通过使用数字签名来验证数据的完整性

    2024年02月07日
    浏览(47)
  • SpringBoot整合jwt+redis+随机验证码+Vue的登录功能

    !注意:前端的Vue项目中要引入element-ui和axios # npm安装element-ui、axios npm insatll element-ui -S npm install axios -S # 在main中引入

    2024年02月10日
    浏览(30)
  • ASP.NET CORE WEBAPI 登录 JWT 鉴权 ,接口权限验证

    介绍 当今Web开发中,API的使用越来越广泛,而API的安全性也变得越来越重要。其中,JWT(JSON Web Token)鉴权和授权是一种常见的解决方案。 本篇文章将会介绍JWT鉴权和授权的原理、实现方式以及注意事项。 什么是JWT? JWT是一种基于JSON格式的开放标准(RFC7519),用于在网络

    2023年04月21日
    浏览(45)
  • 04 动力云客之登录后获取用户信息+JWT存进Redis+Filter验证Token + token续期

    非常好实现. 只要新建一个controller, 并调用SS提供的Authentication对象即可 未登录状态下可以直接访问 api/login/info吗? 不可以. 因为在安全配置类已经写明了, 仅登陆界面允许任何人访问, 其他所有界面都需要认证 由于未写JWT, 默认使用Session 保存会话, ???好像不对 因此只要我们先

    2024年02月21日
    浏览(41)
  • Go语言使用net/http实现简单登录验证和文件上传功能

         最近再看Go语言web编程,go语言搭建Web服务器,既可以用go原生的net/http包,也可以用gin/fasthttp/fiber等这些Web框架。本博客使用net/http模块编写了一个简单的登录验证和文件上传的功能,在此做个简单记录。 目录 1.文件目录结构 2.编译运行 3.用户登录  4.文件上传 5.mime/m

    2024年02月11日
    浏览(34)
  • Java开发 - 单点登录初体验(Spring Security + JWT)

    目录 ​​​​​​​ 前言 为什么要登录 登录的种类 Cookie-Session Cookie-Session-local storage JWT令牌 几种登陆总结  用户身份认证与授权 创建工程 添加依赖 启动项目 Bcrypt算法的工具 创建VO模型类 创建接口文件 创建XML文件 补充配置 添加依赖 添加配置 创建配置类 测试上面的配置

    2024年02月02日
    浏览(36)
  • SpringBoot使用JWT进行身份验证

    JWT身份验证的流程 用户登录 : 用户向服务器提供他们的用户名和密码。 服务器验证 :服务器接收到请求,验证用户名和密码。 生成JWT :如果用户名和密码验证通过,服务器将创建一个 JWT。 JWT 包含了一些数据(称为声明),例如用户 ID、用户名、令牌过期时间等。然后,

    2024年02月16日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包