はじめに
Laravelではユーザー認証機能の導入が簡単にできてしまいます。この記事ではLaravelプロジェクトにユーザー認証機能を追加する手順と、生成されたフォーム(デフォルトでは英語)を日本語化する方法を解説します。
前提
Laravel 6.xを対象としています。
テーブル作成
ユーザー認証のためのマイグレーションは初めから用意されています。
database/migrations/Y_m_d_xxxxxx_create_users_table.php
database/migrations/Y_m_d_xxxxxx_create_password_resets_table.php
マイグレートを実行します。
$ php artisan migrate
テンプレート作成
ログインフォームやユーザー登録フォームなどのテンプレートを作成します。
ターミナルで以下のコマンドを実行します。
$ composer require laravel/ui --dev
Using version ^1.2 for laravel/ui
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Generating optimized autoload files
...
Package manifest generated successfully.
これでプロジェクトにlaravel/ui
が追加されたので、これを使ってテンプレートを生成します。
$ php artisan ui bootstrap --auth
Bootstrap scaffolding installed successfully.
Please run "npm install && npm run dev" to compile your fresh scaffolding.
Authentication scaffolding generated successfully.
続いて以下のコマンドを実行します。
$ npm install && npm run dev
テストサーバーを起動し、http://localhost:8000/login
にアクセスしてみます。
ログインフォームが表示されていればOKです。
フォームの日本語化
認証機能は導入できたものの、表示されている文言がすべて英語のため、日本人ユーザーには優しくありません。レイアウトファイルを直接編集していくのは大変なので、以下の手順で一気に日本語化を行います。
以下のリポジトリからresources/lang/ja.json
を自分のプロジェクトにコピーします。
sutara79/demo-laravel-crud: My practice for basic CRUD of Laravel5 on Heroku.
以上です。なんと、たったこれだけで認証機能の日本語化ができてしまいます。
ちゃんと日本語化されています。もちろん、ユーザー登録画面やパスワードリセット画面も同様に日本語化されています。
解説
resources/views/auth/login.blade.php
を見てみます。
...
<div class="card-header">{{ __('Login') }}</div>
...
__
(アンダースコア2つ)はLang::get
の別名で、多言語対応のための関数です。
Laravelではresources/lang/ja.json
が存在する場合、引数で指定された文字列に対応する文字列を出力します。
resources/lang/ja.json
は以下のようになっています。
{
...
"Login": "ログイン",
...
}
このようにJSON形式で対応する文字列を定義しておけば、わざわざレイアウトファイルを直接編集しなくても日本語に変換してくれます。
おまけ
デフォルトではログイン成功時やユーザー登録完了時のリダイレクト先として/home
が設定されているため、/
に変更しておきます。
リダイレクト先変更
まず、ログイン成功時のリダイレクト先は、app/Http/Controllers/Auth/LoginController.php
を以下のように設定します。
protected $redirectTo = '/';
ユーザー登録完了時のリダイレクト先は、app/Http/Controllers/Auth/RegisterController.php
を以下のように設定します。
protected $redirectTo = '/';
最後に、ログインしているときにログインページやユーザー登録ページにアクセスしたときのリダイレクト先は、app/Http/Middleware/RedirectAuthenticated.php
を以下のように設定します。
if (Auth::guard($guard)->check()) {
return redirect('/');
}
不要ファイル削除
リダイレクト先を/home
から/
に変更したことでホーム関連のファイルが不要となったため削除します。
以下のファイルを削除します。
app/Http/Controller/HomeController.php
resources/views/home.blade.php
ルーティングも削除します。routes/web.php
の以下の行を削除します。
Route::route('/home', 'HomeController');
まとめ
認証機能をこれほど簡単に作れるフレームワークはそうないと思います。(少なくともRuby on Railsにはこんな機能なかった…)Laravelが多くの人に支持され、多くのWebアプリで使用されている理由がわかった気がします。