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.
É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逻辑 }
É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!