ログイン機能を実装する
Laravelには、ログイン機能を自動生成してくれる便利な仕組みがあります。
メールアドレスとパスワードによるユーザ認証であれば、Laravelが自動生成してくれるログイン機能だけで十分です。
自動生成をするために、npmコマンドをインストールしておく必要があります。
Node.jsをインストールするとnpmコマンドが使えるようになります。
https://nodejs.org/ja/
Node.jsホームページから安定板をダウンロードしてインストールしておきましょう。(インストール後、一度再起動しないとコマンドが見つからない場合があります)
ターミナルで、次のコマンドを実行します。
composer require laravel/ui 1.*
php artisan ui vue --auth
npm install
npm run dev
さらに、ログインユーザを管理するためのテーブルを作成する必要がありますが、これもLaravelがmigrationファイルを用意してくれています。database/migrations/の2014_10_12_000000_create_users_table.php、2014_10_12_100000_create_password_resets_table.phpです。
このファイルからテーブルを生成しましょう。(マイグレーションを一度でも実行していれば既に作られています)
php artisan migrate
これでログイン機能が完成しました。
トップページにアクセスしてみましょう。
http://127.0.0.1:8000/
画面右上に「LOGIN」「REGISTER」のリンクが追加されました。
LOGINがログイン画面、REGISTERがログインユーザと登録フォームです。
REGISTERからユーザを登録すると、メールアドレスやパスワード等の情報がusersテーブルに格納されます。
LOGINでは、入力されたメールアドレスとパスワードをusersテーブルから探してログイン判定を行っています。
ログインが成功すると、/homeにリダイレクトします。/homeは非ログイン状態でアクセスするとログイン画面に戻されます。
/homeのルーティングを確認してみます。
routes/web.phpを見ると、次のようなルーティングが追記されています。
Route::get('/home', 'HomeController@index')->name('home');HomeControllerのindexメソッドにルーティングされていることがわかります。
HomeControllerを覗いてみましょう。
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
class HomeController extends Controller
{
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware('auth');
}
/**
* Show the application dashboard.
*
* @return \Illuminate\Contracts\Support\Renderable
*/
public function index()
{
return view('home');
}
}
ここで注目したいのは、__constructメソッド(コンストラクタ)です。
__constructメソッドは、このコントローラクラスが呼ばれたときに、常に初めに処理されるメソッドです。
例えばルーティングでindexメソッドが呼ばれた場合、まず__constructメソッドが実行され、次にindexメソッドが実行されます。
__constructメソッドの中を見ると、1行処理が書かれています。
$this->middleware('auth');この1行がコンストラクタに書かれていると、このコントローラの処理はかならずログイン状態でないとアクセスできなくなります。
非ログイン状態でアクセスした場合は、強制的にログイン画面にリダイレクトされるようになります。
自分で処理を作った際にも同じようにコンストラクタにこの1文を追加することで、簡単にログイン制御が可能です。
コントローラ内で、現在ログインしているユーザのIDを取得したい場合は次のようにします。
コントローラファイルの上部に次のuse文を書いてAuthファサードを使えるようにします。
use Illuminate\Support\Facades\Auth;そして、メソッド内で次のようにしてユーザIDを取得します。
$userId = Auth::user()->id;