Laravelの認証機能(Auth)
Laravelの認証機能をローカル環境で試してみた。環境はLaravel5.6 Windows10 Xampp php7.2.6
認証機能を生成
php artisan make:auth
このコマンドで認証機能に必要なファイルが実装される。ルートの設定やビューも勝手に作ってくれるのでめっちゃ楽。既にアプリを作成中の場合でもroutes/web.php
の一番下に
Auth::routes();
Route::get('/home', 'HomeController@index')->name('home');
が記述されている。
データベースの準備
database\migrations\にある_create_users_table.php
と_create_password_resets_table.php
を利用するデータベースにマイグレーションします。
php artisan migrate
マイグレーションすると使用するデータベースにusersテーブルとpassword_resetsテーブルが作成される。
表示してみる
php artisan serve
でローカルサーバーを起動してlocalhost:8000
にアクセスすると右上にloginとregisterの文字が追加されています。(ルート'/'が return view('welcome');の場合)
Register画面
Login画面
テスト登録
registerページでユーザー名、Emailとパスワードを入力するとMySQL/MariaDBに登録されるのでphpmyadminで確認してみると、登録したパスワードが暗号化?されている
ログインするとlocalhost:8000/home
に飛ばされてログイン状態になる。
ログアウトは右上のユーザー名をクリックしてログアウトを選択。
パスワードのリセット
パスワードのリセットは送信されたメールから行うので、送信するメールサーバーの設定が必要。.env
のこの部分を自分の環境に合わせて設定する。
MAIL_DRIVER=smtp
MAIL_HOST=smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
ログイン画面の'Forgot Your Password?'をクリックするとEmail入力画面が表示されるので登録したメールアドレスを入力して送信するとメールが届く。
Reset Passwordボタンをクリックした先のページで新しいパスワードを入力する。
ローカルサーバーでテスト中の場合はアドレスがhttp://localhost/password/reset/英数字の羅列になってるのでlocalhost:8000に修正してアクセスしてください。
ルートの保護
(2019/04/30追記)認証済みユーザーのみのアクセスを許したい場合は、ルートミドルウェアを使います。
ルート定義でルートミドルウェアを指定するだけで済みます。
<?php
Route::get('profile', function() {
// 認証済みのユーザーのみが入れる
})->middleware('auth');
コントローラを使っているなら、コントローラのコンストラクターでmiddlewareメソッドを呼び出すだけでいい
<?php
public function __construct()
{
$this->middleware('auth');
}
おわりに
php artisan make:auth
とphp artisan migrate
を実行すればこちらで何かを設定することなく「ログイン」「ユーザ登録」「パスワードリセット」機能を実装できるのですごく簡単。
あとは英語表記を日本語に修正したり、実際に使用する場合のルート定義の変更等をすれば個人サイトレベルだったら十分使えそう。
より詳しい内容は日本語ドキュメントを参照してください→ Laravel 5.6 認証 実はメール送信がどうしてもできなくてつまずいたんだけどその解決法は次回書きます。