ホームページ > PHPフレームワーク > Workerman > Workermanを利用してオンラインチャットシステムのユーザー認証と権限制御を実現

Workermanを利用してオンラインチャットシステムのユーザー認証と権限制御を実現

王林
リリース: 2023-09-09 18:30:25
オリジナル
1386 人が閲覧しました

Workermanを利用してオンラインチャットシステムのユーザー認証と権限制御を実現

workerman を使用してオンライン チャット システムのユーザー認証と権限制御を実装する

workerman は、高性能の PHP ソケット フレームワークとして、実際のチャット システムの開発で広く使用されています。時間通信システム。オンラインチャットシステムを開発する場合、ユーザー認証と権限制御は非常に重要な関係となります。この記事では、Workerman を使用してユーザー認証と権限制御を完了する方法を紹介し、コード例を添付します。

  1. ユーザー認証
    ユーザー認証とは、ユーザーの身元が正当であるかどうかを確認することを指し、オンライン チャット システムでは、通常、トークン ベースの認証メカニズムが使用されます。具体的な手順は次のとおりです。

ステップ 1: ユーザーがログインすると、サーバーはトークンを生成し、保存するためにそのトークンをクライアントに送信します。

ステップ 2: クライアントは、後続のリクエストで HTTP ヘッダーの形式でトークンをサーバーに送信します。

ステップ 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');

$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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート