laravel8 使用JWT生成token
1.安装:composer
composer require lcobucci/jwt 3.3
2.自己封装或者在controller生成Base控制器
<?php
namespace App\Http\Controllers\User;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use Lcobucci\JWT\Builder;
use Lcobucci\JWT\Parser;
use Lcobucci\JWT\Signer\Hmac\Sha256;
use Lcobucci\JWT\ValidationData;
class BaseController extends Controller
{
/**
* @param null $uid
* @return string
* 生成token
*/
public static function createToken($uid = null)
{
$signer = new Sha256();//加密规则
$time = time();//当前时间
$token = (new Builder())
->issuedBy('teacher')//签发人
->canOnlyBeUsedBy('student')//接收人
->identifiedBy('MarsLei', true) //标题id
->issuedAt($time)//发出令牌的时间
->canOnlyBeUsedAfter($time) //生效时间(即时生效)
->expiresAt($time + 3600) //过期时间
->with('uid', $uid) //用户id
->sign($signer, 'my') //签名
->getToken(); //得到token
return (string)$token;
}
/**
* @param null $token
* @return int|mixed
* 验证token
*/
public static function verifyToken($token=null){
//检测是否接收到了token
if(empty($token)){
return 0;
}
//转化为可以验证的token
$token = (new Parser())->parse((string) $token);
//验证基本设置
$data = new ValidationData();
$data->setIssuer('teacher');
$data->setAudience('student');
$data->setId('MarsLei');
if(!$token->validate($data)){
return 0;
}
//验证签名
$signer = new Sha256();
if(!$token->verify($signer, 'my')){
return 0;
}
//验证通过,返回用户id
return $token->getClaim('uid');
}
}
3.调用这个Base生成token返回给前端
/**
* @param Request $request
* @return false|string
* 匹配手机号和验证码是否相同
* 使用jwt生成token
*/
public function matePhone(Request $request)
{
$data=$request->input();
$res=User::matePhone($data['phone']);
//用户id来生成token,返回到前端
$token=BaseController::createToken($res['id']);
if (!$res){
return json_encode(['code'=>1,'msg'=>'手机号不存在或手机号错误']);
}
if ($data['codes']!=Cache::get('code')){
return json_encode(['code'=>1,'msg'=>'验证码错误']);
}
return json_encode(['code'=>0,'msg'=>'登录成功','data'=>$token]);
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
推荐文章: