Gunakan pekerja untuk merealisasikan pengesahan pengguna dan kawalan kebenaran sistem sembang dalam talian
Sebagai rangka kerja soket PHP berprestasi tinggi, pekerja digunakan secara meluas dalam pembangunan sistem komunikasi masa nyata. Apabila membangunkan sistem sembang dalam talian, pengesahan pengguna dan kawalan kebenaran adalah pautan yang sangat penting. Artikel ini akan memperkenalkan cara menggunakan Workerman untuk melengkapkan pengesahan pengguna dan kawalan kebenaran serta melampirkan contoh kod.
Langkah 1: Apabila pengguna log masuk, pelayan menjana Token dan menghantar Token kepada klien untuk simpanan.
Langkah 2: Pelanggan menghantar Token ke pelayan dalam bentuk Pengepala HTTP dalam permintaan seterusnya.
Langkah 3: Apabila pelayan menerima permintaan, sahkan kesahihan Token. Jika token itu sah, pengguna dianggap log masuk dan permintaan boleh terus diproses jika tidak, mesej ralat kegagalan pengesahan dikembalikan.
Berikut ialah kod contoh yang menggunakan pekerja pekerja untuk melaksanakan pengesahan pengguna:
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逻辑 }
Langkah 1: Tentukan senarai peranan dan kebenaran dan simpannya dalam pangkalan data.
Langkah 2: Selepas pengguna log masuk, pelayan mendapatkan senarai kebenaran yang sepadan dengan peranan berdasarkan peranan pengguna.
Langkah 3: Apabila pelayan memproses permintaan, ia menentukan sama ada pengguna mempunyai kebenaran untuk melaksanakan operasi berdasarkan kebenaran yang diperlukan oleh permintaan. Jika ia mempunyai kebenaran, teruskan memproses permintaan jika tidak, kembalikan mesej ralat yang menunjukkan kebenaran tidak mencukupi.
Berikut ialah contoh kod yang menggunakan Workerman untuk melaksanakan kawalan kebenaran:
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) { // 从请求路径中提取所需权限的逻辑 }
Melalui contoh kod di atas, kita dapat melihat bahawa sangat mudah untuk melaksanakan pengesahan pengguna dan kawalan kebenaran dalam Workerman. Melalui mekanisme pengesahan dan kebenaran yang munasabah, keselamatan sistem sembang dalam talian dan hak pengguna boleh dilindungi dengan berkesan. Semoga artikel ini dapat membantu anda.
Atas ialah kandungan terperinci Gunakan Workerman untuk merealisasikan pengesahan pengguna dan kawalan kuasa sistem sembang dalam talian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!