thinkphp5.1 使用php - jwt 生成token方法

本文详细介绍了如何在ThinkPHP框架中实现JWT(JSON Web Tokens)的用户认证过程,包括使用composer安装php-jwt库,配置JWT参数,创建Login控制器生成token,以及自定义响应格式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. 使用composer require firebase/php-jwt 安装  或直接用:https://github.com/firebase/php-jwt下载 手动放入项目中,

2.将src下的4个PHP文件放入think下(我用的是thinkphp5.1)修改命名空间 namespase think;

3.创建控制器Login.php 和 ResponseJson.php

.

<?php
// 此为Login.php

namespace app\index\controller;
use think\Controller;
use app\index\controller\ResponseJson;
// 引入jwt
use think\JWT;
class Login extends controller
{
    use ResponseJson;

    /**
     * 编写生成token方法
     * @return [type] [description]
     */
    public function login(){
        // 引用config 下的 jwt.php
        $key = config('jwt.key');  //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当    于加密中常用的 盐  salt
        $jwtData = [
            "iss"=>"",  //签发者 可以为空
            "aud"=>"", //面象的用户,可以为空
            "iat" => config('jwt.lat'), //签发时间
            "nbf" => config('jwt.nbf'), //在什么时候jwt开始生效  (这里表示生成10秒后才生效)
            "exp" => config('jwt.exp'), //token 过期时间
            "uid" => '12', //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
            'password' => '123456',
            'mobile' => '12345678901', // 电话号码
        ];

        $jwtToken = JWT::encode($jwtData, $key);

        return $this->jsonSuccessData([
                'token' =>$jwtToken,
        ]);
    }
}

 


<?php
// 此为ResponseJson.php
namespace app\index\controller;
trait ResponseJson
{

    // 当接口出现异常时的返回
    public function jsonData($code,$message,$data = [])
    {
        return $this->jsonResponse($code,$message,$data);
    }

    // app接口请求成功的返回
    public function jsonSuccessData($data = [])
    {
        return $this->jsonResponse(0,'success',$data);
    }

    // 返回一个json
	private function jsonResponse($code,$message,$data = [])
	{
		$content = [
			'code'=>$code,
			'message'=>$message,
			'data'=>$data,
		];
		return json_encode($content);
	}

}

5.在config下创建jwt.php配置文件,在Login控制器中用 config('jwt.key');来调用配置参数,jwt.php代码如下

<?php
/**
  * 此为 jwt.php 
 * @Author: Marte
 * @Date:   2019-04-22 19:18:46
 * @Last Modified by:   Marte
 * @Last Modified time: 2019-04-22 20:03:40
 */
return[
    'key' => 'yangguang', //自定义key的值
    'lat' => time(),   // 签发时间
    'nbf' => time()+10,   // 生效时间
    'exp' => time()+24 * 3600 , // 过期时间




];

4.创建控制器Login.php 和 ResponseJson.php

.

<?php
// 此为Login.php

namespace app\index\controller;
use think\Controller;
use app\index\controller\ResponseJson;
// 引入jwt
use think\JWT;
/**
*
*/
class Login extends controller
{
    use ResponseJson;

    /**
     * 编写生成token方法
     * @return [type] [description]
     */
    public function login(){
        // 引用config 下的 jwt.php
        $key = config('jwt.key');  //这里是自定义的一个随机字串,应该写在config文件中的,解密时也会用,相当    于加密中常用的 盐  salt
        $jwtData = [
            "iss"=>"",  //签发者 可以为空
            "aud"=>"", //面象的用户,可以为空
            "iat" => config('jwt.lat'), //签发时间
            "nbf" => config('jwt.nbf'), //在什么时候jwt开始生效  (这里表示生成10秒后才生效)
            "exp" => config('jwt.exp'), //token 过期时间
            "uid" => '123', //记录的userid的信息,这里是自已添加上去的,如果有其它信息,可以再添加数组的键值对
            'password' => '123456',
            'mobile' => '1318080800',
        ];

        $jwtToken = JWT::encode($jwtData, $key);

        return $this->jsonSuccessData([
                'token' =>$jwtToken,
        ]);
    }
}

 


<?php
// 此为ResponseJson.php
namespace app\index\controller;
trait ResponseJson
{

    // 当接口出现异常时的返回
    public function jsonData($code,$message,$data = [])
    {
        return $this->jsonResponse($code,$message,$data);
    }

    // app接口请求成功的返回
    public function jsonSuccessData($data = [])
    {
        return $this->jsonResponse(0,'success',$data);
    }

    // 返回一个json
	private function jsonResponse($code,$message,$data = [])
	{
		$content = [
			'code'=>$code,
			'message'=>$message,
			'data'=>$data,
		];
		return json_encode($content);
	}

}

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值