PHPでDjangoの暗号署名機能と互換性のあるライブラリを作りました

先月の記事で、DjangoのセッションデータをPHPから読み書きするのを試していました。

tokibito.hatenablog.com

この際にPHPで実装していた django.core.signing.Signer と互換性のある Signer クラスを調整してライブラリ化、再利用できるようにしました。

Packagistへ登録したパッケージ

nullpobug/django-signing という名前のパッケージで、Packagistに公開しています。 Composerでインストールして利用できます。

packagist.org

リポジトリGitHubにあります:

GitHub - tokibito/php-django-signing: Django compatible signing library for PHP

PHPStanを導入するPullRequestをtadsanからもらったりして、いい感じに仕上がりました。

Packagistへの登録をしたのは初めてですが、GitHubと連携してしまえば特に難しいことはないと感じました。便利ですね。

サンプルコード

前回の記事のコードをコピーして、作成したパッケージのほうで動くように調整してみました。

https://github.com/tokibito/sample_nullpobug/tree/main/django/django-shared-session2

セッションデータのデコード・エンコードのところを差し替えています。

<?php
// 中略
// セッションデータをデコード
$session = Api::loads($session_data, APP_SECRET_KEY, APP_SESSION_SALT);

// セッションデータをエンコード
$session_data = Api::dumps($session, APP_SECRET_KEY, APP_SESSION_SALT, true, true);

https://github.com/tokibito/sample_nullpobug/blob/main/django/django-shared-session2/phpapp/webroot/php/index.php#L52

このデモのコードがもっと短くなるように練習がてら色々作ってみるのも良いかも知れない。

参考