>  기사  >  PHP 프레임워크  >  Workerman을 사용하여 온라인 채팅 시스템의 사용자 인증 및 권한 제어 구현

Workerman을 사용하여 온라인 채팅 시스템의 사용자 인증 및 권한 제어 구현

王林
王林원래의
2023-09-09 18:30:251336검색

Workerman을 사용하여 온라인 채팅 시스템의 사용자 인증 및 권한 제어 구현

workerman을 사용하여 온라인 채팅 시스템의 사용자 인증 및 권한 제어 구현

고성능 PHP 소켓 프레임워크인 Workerman은 실시간 통신 시스템 개발에 널리 사용됩니다. 온라인 채팅 시스템을 개발할 때 사용자 인증과 권한 제어는 매우 중요한 링크입니다. 이 글에서는 Workerman을 사용하여 사용자 인증 및 권한 제어를 완료하는 방법을 소개하고 코드 예제를 첨부합니다.

  1. 사용자 인증
    사용자 인증은 사용자의 신원이 합법적인지 확인하는 것을 의미합니다. 온라인 채팅 시스템에서는 일반적으로 토큰 기반 인증 메커니즘이 사용됩니다. 구체적인 단계는 다음과 같습니다.

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. 권한 제어
    권한 제어는 시스템 리소스에 대한 사용자의 액세스를 제어하는 ​​것을 의미하며 일반적으로 권한 제어를 위해 역할과 권한이 사용됩니다. 구체적인 단계는 다음과 같습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.