workerman을 사용하여 온라인 채팅 시스템의 사용자 인증 및 권한 제어 구현
고성능 PHP 소켓 프레임워크인 Workerman은 실시간 통신 시스템 개발에 널리 사용됩니다. 온라인 채팅 시스템을 개발할 때 사용자 인증과 권한 제어는 매우 중요한 링크입니다. 이 글에서는 Workerman을 사용하여 사용자 인증 및 권한 제어를 완료하는 방법을 소개하고 코드 예제를 첨부합니다.
1단계: 사용자가 로그인하면 서버는 토큰을 생성하고 저장을 위해 클라이언트에 토큰을 보냅니다.
2단계: 클라이언트는 후속 요청에서 HTTP 헤더 형식으로 토큰을 서버에 보냅니다.
3단계: 서버가 요청을 받으면 토큰의 유효성을 확인합니다. 토큰이 유효하면 사용자가 로그인된 것으로 간주되어 요청이 계속 처리될 수 있습니다. 그렇지 않으면 인증 실패 오류 메시지가 반환됩니다.
다음은 Workererman을 사용하여 사용자 인증을 구현하는 샘플 코드입니다.
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단계: 역할 및 권한 목록을 정의하고 데이터베이스에 저장합니다.
2단계: 사용자가 로그인한 후 서버는 사용자의 역할에 따라 역할에 해당하는 권한 목록을 얻습니다.
3단계: 서버는 요청을 처리할 때 요청에 필요한 권한을 기반으로 사용자에게 작업을 수행할 수 있는 권한이 있는지 확인합니다. 권한이 있으면 요청 처리를 계속하세요. 그렇지 않으면 권한이 부족하다는 오류 메시지를 반환합니다.
다음은 Workerman을 사용하여 권한 제어를 구현하는 샘플 코드입니다.
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) { // 从请求路径中提取所需权限的逻辑 }
위의 샘플 코드를 통해 Workerman에서 사용자 인증 및 권한 제어를 구현하는 것이 매우 간단하다는 것을 알 수 있습니다. 합리적인 인증 및 권한 부여 메커니즘을 통해 온라인 채팅 시스템의 보안과 사용자 권리를 효과적으로 보호할 수 있습니다. 이 기사가 도움이 되기를 바랍니다.
위 내용은 Workerman을 사용하여 온라인 채팅 시스템의 사용자 인증 및 권한 제어 구현의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!