CakePHP3で、ユーザー管理はCakeDC/Usersを使って楽したい!
CakePHPで何か作りたいのだけど、ユーザー管理を自分で全部作るのは面倒くさい・・・。そういう僕のような僕のためのプラグインがあったので使ってみました。あくまでも導入部分のみですが、やり方忘れそうなので備忘録。
参考ページ:
CakeDC | CakeDC Users Plugin for CakePHP 3 | The minds behind CakePHP
環境
CakePHP 3.4.9
CakeDC/users 5.0.3( GitHub - CakeDC/users: Users Plugin for CakePHP )
プラグインで用意されている画面
入れるだけで、後ろ側の処理と画面を作ってくれます。
ログイン前
ログイン /login
新規登録 /users/users/register
パスワードリセット /users/users/request-reset-password
管理者用
ユーザー一覧 /users/users
ユーザー追加 /users/users/add
ユーザー情報 /users/users/view/{ ユーザーのID }
ユーザー情報編集 /users/users/edit/{ ユーザーのID }
ユーザーパスワード変更 /users/users/change-password/{ ユーザーのID }
ユーザー用
プロフィール /profile
パスワード変更 /users/users/change-password
準備
1:インストール
composerを使う。ソーシャルログインが必要かどうかで、入れるものが違うみたい。通常のみならこんな感じ。(srcなどがある、いわゆるアプリケーションディレクトリ?で実行)
composer require cakedc/users
2:必要なテーブルを用意
bin/cake migrations migrate -p CakeDC/Users
これで次の3つのテーブルが作られます。
cake_d_c_users_phinxlog
social_accounts
users
3:Superuserを用意
この状態では誰もユーザーがいないので、全てにアクセスできるSuperuserを作ります。
bin/cake users addSuperuser
この直後にUsernameとPasswordが表示されるので、控えておくのを忘れずに!
4:bootstrapでプラグインを読み込む
config/bootstrap.phpに以下を追加します。
Plugin::load('CakeDC/Users', ['routes' => true, 'bootstrap' => true]);
使い方
コントローラーで読み込む
src/Controller/AppController.phpに記述すると、全てのコントローラーで読み込みます。ログインしなくても観られるページを作るなら、AppControllerを継承したコントローラーを作って、そこのinitialize()に記述するのが良いんじゃないかなと。
どのコントローラーに書くとしても、書き方はこんな感じでinitialize( )に書くみたい。
public function initialize()
{
parent::initialize();
$this->loadComponent('CakeDC/Users.UsersAuth');
}
ユーザーロールごとに制限をかける
このままの状態だと、どんなにユーザーを追加してもSuperuser以外はログインしても閲覧できるページがない。そこで、ユーザーロールごとにどのコントローラーのどのアクションにアクセスできるかを設定する必要があります。
config/permissions.php (ファイルがない場合は新規作成しちゃう)
書き方はこんな感じ。
<?php
return [
'Users.SimpleRbac.permissions' => [
[
'role' => 'user',
'controller' => 'Foo',
'action' => 'edit',
],
[
'role' => 'user',
'plugin' => 'CakeDC/Users',
'controller' => 'Users',
'action' => 'logout',
],
]
];
ここで個人的に要注意なのは、logoutを書いておかないとログインしたが最後出られないサイトになってしまうこと。最初は気がつかず/logoutにアクセスしてリダイレクトされまくりました。
設定を変更する
「ユーザー自身が新規登録する機能は閉じたいなー」など、プラグインの設定をすることができます。
設定を記述するファイルはプラグインのロードと同じconfig/bootstrap.php。
ここにこんな感じで記述。
Configure::write('Users.Registration.active', false);
設定できる内容はvendor/cakedc/users/config/users.phpに書かれたもの。指定方法は、ドットで繋いで目的の値を指定。
詳しくは公式で。
users/Configuration.md at master · CakeDC/users · GitHub
日本語化する
5.0.3の時点では、日本語の翻訳ファイルは含まれていません。そのため日本語化するには自分でファイルを用意する必要があります。
vendor/cakedc/users/src/Locale/Users.potをsrc/Locale/jp_JP/Users.poにコピーします。拡張子を変更するのを忘れずに。
中身を見て「msgstr」の後ろに日本語を書けばいいのですが、いかんせん量が多くて埋めないとその文字が空のまま出てしまうようなので、取り急ぎは英語をコピペで入れて必要なものだけ日本語にするのがいいのではないかと。
なお、このファイルを置いただけじゃなく、config/bootstrap.phpに
ini_set('intl.default_locale', 'ja_JP');
を追加するのを忘れずに。また、キャッシュがきついので、ファイルを変更したらtmp/cache/persistent以下のファイルを消したほうがいいです。
メールの送信元(from)を変更
この設定は、CakePHP自体のものを参照してるようなので、そっちを変更します。
config/app.phpの中にある「Email」「EmailTransport」を、送りたいメアドのもので登録します。
まずはこんな感じで。