sfDoctrineGuardPluginについてのメモ
symfonyには次のようなサイトのユーザー管理機能をまとめたプラグインがあります
- ユーザーのログイン機能
- ユーザー一覧をメンテナンスする管理画面
- コマンドラインからユーザーの情報を編集する機能
- 未登録のユーザーがユーザー登録できる画面
- パスワードを忘れたユーザーがパスワードを再発行できる画面
- ユーザーへのパーミッション・グループの付与と管理
それが「sfDoctrineGuardPlugin」です。
プラグインに付属しているREADMEの翻訳も合わせて参照してください。
sfDoctrineGuardPlugin で使えるコマンド(タスク)一覧
guard :add-group ユーザーにグループを追加する :add-permission ユーザーにパーミッションを追加する :change-password ユーザーのパスワードを変更する :create-user ユーザーを作成する :promote ユーザーをスーパー管理者に設定する symfony guard:add-group [--application[="..."]] [--env="..."] username group symfony guard:add-permission [--application[="..."]] [--env="..."] username permission symfony guard:change-password [--application[="..."]] [--env="..."] username password symfony guard:create-user [--is-super-admin] [--application[="..."]] [--env="..."] email_address username password [first_name] [last_name] symfony guard:promote [--application[="..."]] [--env="..."] username
sfDoctrineGuardPlugin のデフォルト URL 一覧
sfDoctrineGuardPlugin はルーティングを内部で自前で追加します。これは次のような URL になっています。
- サインイン(ログイン) /guard/login
- サインアウト(ログアウト) /guard/logout
- ユーザー登録 /guard/register
- パスワード再発行 /guard/forgot_password
- ユーザー管理 /guard/users
- グループ管理 /guard/groups
- パーミッション管理 /guard/permission
なお、このルーティングの自動登録は、プラグインのコンフィギュレーションである sfDoctrineGuardPluginConfiguration クラスの initialize() 内で、routing.load_configuration イベントを監視して、実際の処理は sfDoctrineGuardPlugin/lib/routing/sfGuardRouting.class.php 内で行われています。
URL をカスタマイズする場合は、README にあるように routing.yml に手作業で各ルーティングを追加することもできますが、上記ファイルのコードを参考にして、自動で自前 URL のルーティングを追加するようにもできます。
※パフォーマンス的には、routing.yml に書いた方が良いと思われます。
ログイン状態を Cookie に記憶
ログイン画面で Cookie への記憶にチェックできますが、この機能を有効にするには sfGuardRememberMeFilter フィルターを有効にしておく必要があります。
README の手順では「オプション」と書いてあるので注意が必要です。
また、sfGuardRememberMeFilter のコードはそのままではエラーになります。
以下の 2 点を修正する必要があるようです。
<?php - ->innerJoin('r.sfGuardUser u') + ->innerJoin('r.User u')
<?php - $this->context->getUser()->signIn($q->fetchOne()->sfGuardUser); + $this->context->getUser()->signIn($q->fetchOne()->User);
パスワードの再発行時のメール
パスワードの再発行を行う場合、再発行用の URL の通知と、変更後のパスワードの通知の 2 つのメールが送信されます。
このうち、変更後のパスワード通知メールにはパスワードが平文で記載されていますので、変更した方がよいかと思います。
メールの本文を変更する場合は、該当するテンプレートファイルをカスタマイズします。手順はREADMEに記載されていますので、参照してください。