ユーザー認証機能の導入手順と生成されたフォームを日本語化する方法を解説

はじめに

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アプリで使用されている理由がわかった気がします。

関連記事

開発環境(ローカルストレージ)と本番環境(Amazon S3)にトリミング+リサイズした画像を保存する方法
# はじめに 以前、以下の記事を書きました。 - [開発環境と本番環境で画像のアップロード先を分岐する方法 \- AUTOVICE](https://www.autovice.jp/articles/68) - [ローカルやAmazon [...]
2020年3月7日 11:56
Laravel Mixの仕組みをわかりやすく解説:CSSをSASS/SCSSで記述する方法
# はじめに Laravel Mixの仕組みをわかりやすく解説します。Laravel Mixを使ってアセットコンパイルを行うことで、SASS/SCSSでCSSを記述できるようになります。 # Laravel Mixの仕組み まずはじめに、 [...]
2020年3月6日 9:25
【Laravel 6.x】Laravelプロジェクトの名称を変更する方法
# はじめに あまりないケースではありますが、一度作成したLaravelプロジェクトの名称を変更する方法を解説します。ここで言うLaravelプロジェクトの名称とは、以下のコマンドの`Sample`のことを指します。 ```terminal [...]
2020年3月4日 16:24
【Laravel】ローカルディスクやAmazon S3にアップロードした画像をビューで表示する方法
# はじめに 本記事では、ローカルディスクやAmazon S3にアップロードした画像をビューで表示する方法について説明しています。 なお、本記事では画像のアップロードする方法については説明していません。本記事は既に実装済みの画像アップロード [...]
2020年3月4日 15:44
【Laravel】Amazon S3へのアップロードが「403 Access Denied」で失敗する原因と対処方法
# はじめに LaravelでAmazon S3へ画像アップロードする処理を実装し、いざアップロードしようとしたところ、以下のエラーが出て失敗しました。 ``` Error executing "PutObject" on "https: [...]
2020年3月4日 13:33
開発環境と本番環境で画像のアップロード先を分岐する方法
# はじめに この記事では、以下の方針で画像のアップロード先を分岐する方法について解説しています。 - 開発環境:ローカル(storage/app/public/) - 本番環境:Amazon S3 # 事前準備 AWSに未登録の [...]
2020年3月4日 12:52
独自ポリシーの導入手順と注意点(ハマリポイント)を解説
# はじめに ユーザーと記事を関連付けておいて、編集や削除は記事の作成者のみ許可したいときにはポリシーを作成します。今回はポリシーの導入手順と注意点(ハマリポイント)を解説します。 # 導入手順 ## ポリシー作成 ターミナルで以下 [...]
2020年3月1日 10:32
【Laravel 6.x】ネスト構造になっているRESTfulルーティングの定義方法
# はじめに RESTfulルーティングを定義するときは`Route::resource`を使いますが、ネスト構造になっているRESTfulルーティングの定義方法を調べたので記事にします。 # 前提 おそらく、Laravel 6.xのみ対 [...]
2020年2月28日 20:06