Laraval 5 による開発の手順 #5
Update: 2018-10-14
Laraval 5 による開発の手順 #4 の続きです。
誰でもユーザ登録できる機能を削除する
私が作りたいものは、管理者が設定した会員だけが利用するシステムです。
Laraval 5 による開発の手順 #4 までに作成したものには "Register" メニューがあるので、それを削除します。 UI の見た目だけなくて、コントローラも削除します。
それから、ログインしていないときに表示するページはログインページでいいです。 welcome ページからログインページへの遷移はなくしたいです。 welcome ページは削除します。
まず、以下のファイルを削除します。
app/
Http/
Controllers/
Auth/
RegisterController.php
VerificationController
resources/
views/
auth/
register.blade.php
verify.blade.php
welcome.blade.php
トップページ /
は welcome ページではなく、ログイン後に表示される home ページにします。
そのため、まず web.php
の
Route::get('/', function () {
return view('welcome');
});
を削除して、
Route::get('/home', 'HomeController@index')->name('home');
を
Route::get('/', 'HomeController@index')->name('home');
に変更します。
それから LoginController.php
と ResetPasswordController.php
の
protected $redirectTo = '/home';
を
protected $redirectTo = '/';
に変更します。
//追記(2018/10/07):ここから//
また、 /app/Http/Middleware/RedirectIfAuthenticated.php の
if (Auth::guard($guard)->check()) {
return redirect('/home');
}
を
if (Auth::guard($guard)->check()) {
return redirect('/');
}
に変更します。
//追記(2018/10/07):ここまで//
"Register" メニューのリンクは app.blade.php
にあるので、
<li class="nav-item">
<a class="nav-link" href="{%raw%}{{ route('register') }}{%endraw%}">{%raw%}{{ __('Register') }}{%endraw%}</a>
</li>
を削除します。
これで、誰でもユーザ登録できる機能が(たぶん)完全に無くなります。 もともと "Register" メニューに設定されていた URL を直接指定してもエラーになります。
テスト用のユーザを追加する
まだ管理者がユーザを登録する機能を作っていないので、 Laravel 5 の Seeding 機能を利用して local の環境に限りテスト用のユーザを追加できるよにします。
php artisan make:seeder LocalSeeder
で local 環境用の LocalSeeder.php
を作成し、
DatabaseSeeder.php
から以下のように呼び出します。
// for local test.
if (App::environment('local')) {
$this->call(LocalSeeder::class);
}
.env
に APP_ENV=local
が設定されている場合、次のコマンドでデータベースを初期化して
local 用のテストデータを入れてテスト用サーバを起動することができます。
php artisan migrate:refresh --seed
php artisan serve
APP_ENV=staging
や APP_ENV=production
の場合は
LocalSeeder.php
は無視されます。
日本語化する
ログインやパスワード変更に関係するページの日本語化は以下の2ファイルでできます。
resources/
lang/
ja/
passwords.php
ja.json
resources/lang/ja.json
のことは
Laraval 5 による開発の手順 #3 に書き忘れていたので追記しておきました。
パスワードリセットのために送信するメールのカスタマイズについては Modify Password Reset Email Text In Laravel を参考にしました。
まず、次のコマンドでカスタマイズのためのクラスを追加します。
php artisan make:notification MailResetPasswordNotification
パスワードリセットのメールのテンプレート
/vendor/laravel/framework/src/Illuminate/Notifications/resources/views/email.blade.php
を見ながら
MailResetPasswordNotification.php
の
public function toMail($notifiable)
と
resources/lang/ja.json
に
メールの件名と本文のカスタマイズ内容を記載します。
メールの送信元は .env
に以下の2行を追加すると変更できます。
MAIL_FROM_ADDRESS=info@abc.def
MAIL_FROM_NAME=Tamuro
そして、 パスワードリセット時に
MailResetPasswordNotification
を使ように
app/User.php
のスーパークラスのメソッドをオーバーライドする処理を追加します。
public function sendPasswordResetNotification($token)
{
$this->notify(new MailResetPasswordNotification($token));
}
Laraval 5 による開発の手順 #2 Mailtrap.io のアカウントを設定し、 テスト用サーバを起動して「パスワードを忘れた場合...」 からパスワードリセットメールを送信すると、 Demo inbox で HTML と Text それぞれの送信内容を確認できます。
今回カスタマイズしたメールの文面は後ほど作成する管理者からの招待メールも兼ねる予定なので、 パスワードの「再設定」ではなく「設定」という表現にしました。
ここまで作ったものは https://github.com/MichinobuMaeda/tamuro.git
のタグ startlaravel5
です。チェックアウトの手順は
Laraval 5 による開発の手順 #2 の末尾をご参照ください。
チェックアウト済みであれば
git pull
git checkout tags/startlaravel5
としていただければいいです。
Tag: PHP Laravel Mailtrap