다음 프로젝트에서는 TP5를 사용하여 작은 프로그램을 개발할 예정이므로 TP 프레임워크를 사용했습니다. 작은 프로그램을 개발하려면 API 인터페이스를 작성하는 데 필요한 배경 지식이 필요하기 때문에 관련 종속성이 있는지 온라인으로 확인하는 것이 좋습니다. think-api 확장 도구는 미니 프로그램 사용자의 로그인 상태를 확인하기 위해 주로 jwt 기능을 사용하고 싶기 때문에 내 프로젝트를 예로 들어 think-api를 통해 JWT를 배포하는 방법에 대해 간략하게 설명하겠습니다.
1. 종속성 설치
제가 사용하는 TP 버전은 TP5.1, 확장 프로그램 다운로드 주소: https://github.com/czewail/think-api, 작곡가를 통해 종속성 설치:
$ composer require zewail/think-api:1.1.x
2. 참고
확장 기능이 설치된 후 Vendor/think-api/config/jwt.php 파일에서 jwt 구성을 볼 수 있습니다.
주로 수정해야 하는 사용자 모델 경로:
return [ // 加密算法 'algorithm' => 'HS256', // HMAC算法使用的加密字符串 'key' => 'ex-key', // RSA算法使用的私钥文件路径 'privateKeyPath' => '/home/rsa_private_key.pem', // RSA算法使用的公钥文件路径 'publicKeyPath' => '/home/rsa_public_key.pem', // 误差时间,单位秒 'deviation' => 60, // 过期时间, 单位分钟 'ttl' => 120, // 用户模型路径 'user' => app\api\model\User::class, ];
3. API 인터페이스 컨트롤러 생성
프론트 엔드에 토큰을 반환하려는 명령줄을 통해 컨트롤러를 생성합니다
$ php thnk make:controller api/Index
4 . 견적 종속성
생성된 파일 헤더에 파일 경로 추가: ZewailApiFacadesJWT 사용; 케이스 코드는 다음과 같습니다.
public function index() { //获取前台发送过来的登录信息 $tel = $this->request->tel; $password = $this->request->passwword; //把登录信息传入JWT验证匹配 $credentials = ['tel' => $tel, 'password' => $password]; //1.验证通过返回token 1和2任意取一种方式 $token = JWT::attempt($credentials); //2.通过已有账户模型生成token 1和2任意取一种方式 $user = User::find(84); $token = JWT::fromUser($user); $msg = "验证成功"; //把token发送给前台确认是否成功登陆 return $this->ApiSuccess($token, $msg); }
한 가지 주목해야 할 점은 API의 기본 수신 매개변수가 모바일과 비밀번호라는 점입니다. Door-to-Door 예에서는 전화번호와 비밀번호입니다. 변수 이름이 변경되었으므로 설명하기 위해 사용자 모델에 일부 코드를 삽입해야 합니다. 등.
public $jwtSub = 'tel';
5. 라우팅 구성
在 route/route.php 中加入路由地址 Route::get('api/test', 'api/Index/index');
6. 테스트 실행
백그라운드에서 토큰을 생성하고 로그인 확인을 위해 프런트 데스크에 반환할 수 있도록 테스트 결과는 다음과 같습니다.
7. 토큰 확인(보충)
아래 그림의 예시와 같이 토큰 확인을 위해 이전에 생성된 토큰을 postman의 헤더와 함께 백그라운드로 다시 보냅니다.
그런 다음 헤더를 가지고 인증 경로에 액세스하세요. 인증 코드는 다음과 같습니다.
if ($user = JWT::authenticate()) { return true; }
인증이 정확하면 true가 반환됩니다.
8. 토큰 존재하지 않음 및 토큰 만료 문제 관련(보충)
vendorthink-apisrcJWT/Factoriescode.php 파일에서 think-api 인터페이스는 해당 오류 피드백을 제공합니다.
// 检查是否过期 if (isset($payload->exp) && (time() - $this->deviation) >= $payload->exp) { throw new TokenExpiredException('该 Token 已过期'); } // 验证签名 if (!$this->verify("$header64.$payload64", $signature)) { throw new TokenInvalidException('无效的 Token'); }
그러면 이러한 상태 피드백을 어떻게 사용합니까? 이를 위해서는 프런트 엔드 미들웨어를 사용하여 프런트 엔드에서 보낸 토큰 정보를 확인해야 합니다.
먼저 미들웨어를 생성하세요:
$ php think make:middle Test
그런 다음 미들웨어에 다음 내용을 작성하세요:
//用try catch捕获报错反馈 public function handle($request, Closure $next) { try { if (!$user = JWT::authenticate()) { return response()->json([ 'errcode' => 1004, 'errmsg' => '无此用户', ], 404); } return $next($request); } catch (TokenExpiredException $e) { return response()->json([ 'errcode' => 1003, 'errmsg' => 'token 过期', //token已过期 ]); } catch (TokenInvalidException $e) { return response()->json([ 'errcode' => 1002, 'errmsg' => 'token 无效', //token无效 ]); } catch (JWTException $e) { return response()->json([ 'errcode' => 1001, 'errmsg' => '缺少token', //token为空 ]); } }
그런 다음 경로에서 이를 참조하세요.
추천 튜토리얼: thinkphp 튜토리얼
위 내용은 ThinkPHP5-think-API를 사용하여 JWT 배포의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!