Maison > développement back-end > tutoriel php > PHP HyperF -> Firebase JWT

PHP HyperF -> Firebase JWT

DDD
Libérer: 2024-12-11 09:36:10
original
309 Les gens l'ont consulté

PHP HyperF -> Firebase JWT Firebase JWT" />

HyperF - Projet

Système simple pour valider les jetons JWT et garantir l'authenticité et l'intégrité des processus d'authentification.

Créer - Projet

composer create-project hyperf/hyperf-skeleton "project"
Copier après la connexion

Installer - Observateur

composer require hyperf/watcher --dev
Copier après la connexion

Installer – Firebase JWT

composer require firebase/php-jwt
Copier après la connexion

Serveur - Démarrer

cd project ;
php bin/hyperf.php server:watch ;
Copier après la connexion

HyperF - APPLICATION

APPLICATION - Environnement

JWT_KEY="***"
Copier après la connexion

chemin : /project/.env

APPLICATION - Routeur

Router::addRoute(['GET', 'POST'], '/generate', 'App\Controller\ControllerJWT@generate');
Router::addRoute(['GET', 'POST'], '/decode', 'App\Controller\ControllerJWT@decode');
Copier après la connexion

chemin : /project/config/routes.php

APPLICATION - Contrôleur

namespace App\Controller;

use Hyperf\Di\Annotation\Inject;
use Hyperf\HttpServer\Contract\RequestInterface;
use Hyperf\HttpServer\Contract\ResponseInterface;

use function Hyperf\Support\env;

use Ramsey\Uuid\Uuid;

use Firebase\JWT\JWT;
use Firebase\JWT\Key;

class ControllerJWT
{
    #[Inject]
    protected RequestInterface $request;

    #[Inject]
    protected ResponseInterface $response;

    protected $jwt_key;

    public function __construct()
    {
        $this->jwt_key=env('JWT_KEY', '***');
    }

    public function generate()
    {
        $payload=[
            'uuid'=>Uuid::uuid4()->toString(),
            'token'=>sha1(str_shuffle('0123456789abcdefghijklmnopqrstuvwxyz')),
        ];
        $token=JWT::encode($payload, $this->jwt_key, 'HS256');
        return [
            'payload'=>$payload,
            'token'=>$token,
        ];
    }

    public function decode()
    {
        $token=$this->request->getHeader('Authorization')[0] ?? '';
        $token=str_replace('Bearer ', '', $token);
        try {
            $decode=JWT::decode($token, new Key($this->jwt_key, 'HS256'));
        } catch (\Exception $e){
            return $this->response->withStatus(401)->json(['token'=>'invalid']);
        }
        return [
            'token'=>$token,
            'decode'=>$decode,
        ];
    }

}
Copier après la connexion

chemin : /project/app/Controller/ControllerJWT.php

Exécuter

GET - Générer un jeton

curl "http://127.0.0.1:9501/generate"

Response:
{
    "payload": {
        "uuid": "...0123",
        "token": "***"
    },
    "token": "***"
}
Copier après la connexion

GET - Jeton de décodage

curl "http://127.0.0.1:9501/decode" -H "Authorization: Bearer %token%"

Response:
{
    "token": "***",
    "decode": {
        "uuid": "...0123",
        "token": "***"
    }
}
Copier après la connexion

https://github.com/thiagoeti/php-hyperf-firebase-jwt

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal