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);
}
}