自学的菜鸟 2021-12-01 13:06 采纳率: 61.6%
浏览 78
已结题

PHP怎么使用jwt生成 token并且验证

我现在需要写一个用户登录的端口,前端发送登录信息用户名:xiaoming,密码:123456到端口www.abc.com/php/login.php,这个PHP要验证用户名和密码,然后生成一个token和用户信息返回给前端,然后前端再次请求的时候会带上这个token,php要怎么验证解析这个token并返回相应的用户信息,这个php文件要怎么写呢?

<?php
require_once '../vendor/autoload.php';
use Firebase\JWT\JWT;
use Firebase\JWT\Key;

?>


  • 写回答

2条回答 默认 最新

  • 呼叫007 2021-12-01 14:45
    关注

    第一 账号密码登录 获取token
    JWT需要composer安装下,然后调用

    $jwt_config = [
        'iss' => config('jwt.iss'), //签发者 可选
        'aud' => config('jwt.iss'), //接收该JWT的一方,可选
        'iat' => time(), //签发时间
        'nbf' => time() , //(Not Before):某个时间点后才能访问,比如设置time+30,表示当前时间30秒后才能使用
        'exp' => time()+7200, //过期时间,这里设置2个小时
        'data' => [ //自定义信息,不要定义敏感信息
            'user_id' => $user_data['id']
        ]
    ];
    $token=JWT::encode($jwt_config,config('jwt.key'),'HS256');
    

    第二 解密token

    //检测token
    public function check_token($token){
      try {
        JWT::$leeway = 60;//当前时间减去60,把时间留点余地
        $decoded = JWT::decode($token, config('jwt.key'), ['HS256']); //HS256方式,这里要和签发的时候对应
        $arr = (array)$decoded;
        $result=['code'=>200,'msg'=>'OK','user_id'=>$arr['data']->user_id];
      } catch(SignatureInvalidException $e) {  //签名不正确
        $result=['code'=>400,'msg'=>$e->getMessage()];
      }catch(BeforeValidException $e) {  // 签名在某个时间点之后才能用
        $result=['code'=>400,'msg'=>$e->getMessage()];
      }catch(ExpiredException $e) {  // token过期
        $result=['code'=>400,'msg'=>$e->getMessage()];
      }catch(\Exception $e) {  //其他错误
        $result=['code'=>400,'msg'=>$e->getMessage()];
      }
      return $result;
    }
    这样就能得到用户id
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 12月14日
  • 已采纳回答 12月6日
  • 修改了问题 12月1日
  • 创建了问题 12月1日

悬赏问题

  • ¥15 mmo能不能做客户端怪物
  • ¥15 osm下载到arcgis出错
  • ¥15 Dell g15 每次打开eiq portal后3分钟内自动退出
  • ¥200 使用python编写程序,采用socket方式获取网页实时刷新的数据,能定时print()出来就行。
  • ¥15 matlab如何根据图片中的公式绘制e和v的曲线图
  • ¥15 我想用Python(Django)+Vue搭建一个用户登录界面,但是在运行npm run serve时报错了如何解决?
  • ¥15 QQ邮箱过期怎么恢复?
  • ¥15 登录他人的vue项目显示服务器错误
  • ¥15 (标签-android|关键词-app)
  • ¥15 comsol仿真压阻传感器