Maison  >  Article  >  cadre php  >  Utilisez Workerman pour réaliser l'authentification des utilisateurs et le contrôle d'autorité du système de chat en ligne

Utilisez Workerman pour réaliser l'authentification des utilisateurs et le contrôle d'autorité du système de chat en ligne

王林
王林original
2023-09-09 18:30:251348parcourir

Utilisez Workerman pour réaliser lauthentification des utilisateurs et le contrôle dautorité du système de chat en ligne

Utilisez Workerman pour réaliser l'authentification des utilisateurs et le contrôle des autorisations du système de chat en ligne

En tant que framework de socket PHP haute performance, Workerman est largement utilisé dans le développement de systèmes de communication en temps réel. Lors du développement d’un système de chat en ligne, l’authentification des utilisateurs et le contrôle des autorisations sont des liens très importants. Cet article explique comment utiliser Workerman pour effectuer l'authentification des utilisateurs et le contrôle des autorisations, et joint des exemples de code.

  1. Authentification de l'utilisateur
    L'authentification de l'utilisateur fait référence à la vérification si l'identité de l'utilisateur est légale. Dans les systèmes de chat en ligne, un mécanisme d'authentification basé sur un jeton est généralement utilisé. Les étapes spécifiques sont les suivantes :

Étape 1 : Lorsque l'utilisateur se connecte, le serveur génère un jeton et envoie le jeton au client pour stockage.

Étape 2 : Le client envoie le jeton au serveur sous la forme d'un en-tête HTTP dans les requêtes suivantes.

Étape 3 : Lorsque le serveur reçoit la demande, vérifiez la validité du Token. Si le jeton est valide, l'utilisateur est considéré comme connecté et la demande peut continuer à être traitée ; sinon, un message d'erreur d'échec d'authentification est renvoyé.

Ce qui suit est un exemple de code qui utilise Workererman pour implémenter l'authentification des utilisateurs :

require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;
use WorkermanConnectionAsyncTcpConnection;
use WorkermanProtocolsHttpRequest;
use WorkermanProtocolsHttpResponse;

$worker = new Worker('http://0.0.0.0:8080');

$users = [
    'user1' => 'password1',
    'user2' => 'password2',
    // ...
];

$worker->onMessage = function ($connection, Request $request) use ($users) {
    $path = $request->path();
    if ($path === '/login') {
        $username = $request->post('username');
        $password = $request->post('password');
        if (!isset($users[$username]) || $users[$username] !== $password) {
            $response = new Response(401, ['Content-Type' => 'application/json'], json_encode(['error' => 'Invalid credentials']));
            $connection->send($response);
        } else {
            $token = generateToken();
            $response = new Response(200, ['Content-Type' => 'application/json'], json_encode(['token' => $token]));
            $connection->send($response);
        }
    } elseif (substr($path, 0, 7) === '/api/v1') {
        $token = $request->header('Authorization');
        if (!validateToken($token)) {
            $response = new Response(401, ['Content-Type' => 'application/json'], json_encode(['error' => 'Unauthorized']));
            $connection->send($response);
        } else {
            // 处理请求逻辑
        }
    } else {
        $response = new Response(404, ['Content-Type' => 'text/html'], 'Not found');
        $connection->send($response);
    }
};

Worker::runAll();

function generateToken()
{
    // 生成Token逻辑
}

function validateToken($token)
{
    // 验证Token逻辑
}
  1. Contrôle des autorisations
    Le contrôle des autorisations fait référence au contrôle de l'accès de l'utilisateur aux ressources système. Dans les systèmes de chat en ligne, les rôles et les autorisations sont généralement utilisés pour le contrôle des autorisations. Les étapes spécifiques sont les suivantes :

Étape 1 : Définissez la liste des rôles et des autorisations et stockez-la dans la base de données.

Étape 2 : Une fois l'utilisateur connecté, le serveur obtient la liste d'autorisations correspondant au rôle en fonction du rôle de l'utilisateur.

Étape 3 : Lorsque le serveur traite la demande, il détermine si l'utilisateur a l'autorisation d'effectuer l'opération en fonction des autorisations requises par la demande. S'il dispose de l'autorisation, continuez à traiter la demande ; sinon, renvoyez un message d'erreur indiquant des autorisations insuffisantes.

Ce qui suit est un exemple de code qui utilise Workerman pour implémenter le contrôle des autorisations :

require_once __DIR__ . '/vendor/autoload.php';

use WorkermanWorker;
use WorkermanConnectionAsyncTcpConnection;
use WorkermanProtocolsHttpRequest;
use WorkermanProtocolsHttpResponse;

$worker = new Worker('http://0.0.0.0:8080');

$roles = [
    'admin' => ['create', 'read', 'update', 'delete'],
    'user' => ['read']
];

$worker->onMessage = function ($connection, Request $request) use ($roles) {
    $path = $request->path();
    $role = getUserRole(); // 根据Token获取用户角色

    if (!isset($roles[$role])) {
        $response = new Response(401, ['Content-Type' => 'application/json'], json_encode(['error' => 'Unauthorized']));
        $connection->send($response);
        return;
    }

    $allowedPermissions = $roles[$role];
    $requiredPermission = extractRequiredPermission($path); // 根据请求路径提取所需权限

    if (!in_array($requiredPermission, $allowedPermissions)) {
        $response = new Response(403, ['Content-Type' => 'application/json'], json_encode(['error' => 'Forbidden']));
        $connection->send($response);
        return;
    }

    // 处理请求逻辑
};

Worker::runAll();

function getUserRole()
{
    // 根据Token获取用户角色的逻辑
}

function extractRequiredPermission($path)
{
    // 从请求路径中提取所需权限的逻辑
}

Grâce à l'exemple de code ci-dessus, nous pouvons voir qu'il est très simple d'implémenter l'authentification des utilisateurs et le contrôle des autorisations dans Workerman. Grâce à des mécanismes d'authentification et d'autorisation raisonnables, la sécurité du système de chat en ligne et les droits des utilisateurs peuvent être efficacement protégés. J'espère que cet article pourra vous être utile.

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:
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