ひとりまとめ

もろもろのメモ

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

f:id:g2_girichan:20170705183418p:plain

新規登録 /users/users/register

f:id:g2_girichan:20170705183533p:plain

パスワードリセット /users/users/request-reset-password

f:id:g2_girichan:20170705183630p:plain

 

管理者用

ユーザー一覧 /users/users

f:id:g2_girichan:20170705185556p:plain

ユーザー追加 /users/users/add

f:id:g2_girichan:20170705185720p:plain

 ユーザー情報 /users/users/view/{ ユーザーのID }

f:id:g2_girichan:20170705190237p:plain

ユーザー情報編集 /users/users/edit/{ ユーザーのID }

f:id:g2_girichan:20170705195134p:plain

ユーザーパスワード変更 /users/users/change-password/{ ユーザーのID }

f:id:g2_girichan:20170705195502p:plain

 

ユーザー用

プロフィール /profile

f:id:g2_girichan:20170705200643p:plain

パスワード変更 /users/users/change-password

f:id:g2_girichan:20170705195502p:plain

 

準備

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」を、送りたいメアドのもので登録します。

 

まずはこんな感じで。

PHPフレームワーク CakePHP 3入門

PHPフレームワーク CakePHP 3入門