Laravel5.6系で試しました
まずはLaravelのバージョンの確認。
$ php artisan -V
Laravel Framework 5.6.29
ユーザー認証機能の作成
まっさらなLaravelプロジェクトを作って実装してみます。まずはユーザー認証機能を作成します。
$ php artisan make:auth
Authentication scaffolding generated successfully.
コマンドが成功するとファイルが追加されたり追記されたりします。
ルート情報への追記
/routes/web.php
ファイルに以下のコードが追加されました。
Auth::routes();
これは、ログインやログアウトなどのユーザー認証関連のルート情報をまとめたもののようです。/vendor/laravel/framework/src/Illuminate/Routing/Router.php
の1130行目付近にある以下の関数が動作します。
public function auth()
{
// Authentication Routes...
$this->get('login', 'Auth\LoginController@showLoginForm')->name('login');
$this->post('login', 'Auth\LoginController@login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
$this->get('register', 'Auth\RegisterController@showRegistrationForm')->name('register');
$this->post('register', 'Auth\RegisterController@register');
// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');
}
もう1行は名前付きルートの設定です。
Route::get('/home', 'HomeController@index')->name('home');
コントローラーの追加
/app/Http/Contollers/HomeController.php
というコントローラーファイルが新規作成されました。内容は以下のような感じ。ミドルウェアの設定とビューの設定があります。
<?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\Http\Response
*/
public function index()
{
return view('home');
}
}
その他に認証用のコントローラーとして、/app/Http/Controllers/Auth
ディレクトリに以下のファイルが最初から用意されています。
┗app
┗Http
┗Controllers
┗Auth
┣ForgotPasswordController.php パスワードを忘れた人コントローラー
┣LoginController.php ログイン・ログアウトコントローラ
┣RegisterController.php ユーザー登録コントローラー
┗ResetPasswordController.php パスワードリセットコントローラー
Bladeテンプレートの追加
ユーザー認証に使用するBladeテンプレートファイルがviewsディレクトリに新規追加されます。
┗resources
┗views
┣auth
┃┣passwords
┃┃┣email.blade.php パスワードを忘れた人コントローラー
┃┃┗reset.blade.php パスワードリセット用テンプレート
┃┣login.blade.php ログイン用テンプレート
┃┗register.blade.php ユーザー登録用テンプレート
┣layouts
┃┗app.blade.php アプリケーション基本フレームテンプレート
┗home.blade.php ホームページ用テンプレート
データベース関連の実装について
Laravelのインストール時にデフォルトで準備されているものを利用します。
マイグレーション
認証で使用するマイグレーションファイルは2つ。ユーザーデータ保存用のテーブルとパスワードリセット用のテーブルが以下のディレクトリに保存されています。
┗database
┗migrations
┣日時_create_users_table.php ユーザーテーブル
┗日時_create_password_resets_table.php パスワードリセットテーブル
モデル
ユーザーデータのモデルは、app/User.php
で定義されています。
<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
use Notifiable;
/**
* The attributes that are mass assignable.
*
* @var array
*/
protected $fillable = [
'name', 'email', 'password',
];
/**
* The attributes that should be hidden for arrays.
*
* @var array
*/
protected $hidden = [
'password', 'remember_token',
];
}
アクセスしてみる
php artisan serve
でローカルサーバーを起動して、http://127.0.0.1:8000/login
にアクセスしてみると…
表示された!\(^o^)/
Bootstrapがデフォルトでインストールされているので、たったこれだけの作業でそれっぽいログイン画面ができる!けど勝手に色々やってくれる分、どこの何がどうなったかは理解していかないとなぁ。