LoginSignup
3
3

More than 3 years have passed since last update.

Laravel 5.8 認証

Last updated at Posted at 2019-07-19

認証

laravelだと以下のコマンドで認証機能に加えて
ログインユーザー登録とパスワードリセットのメール送信、
ユーザー登録時のメール確認なども付いている。

make:auth

以下のコマンドで認証に必要なControllerとviewが一式コピーされる。

$ php artisan make:auth

routes/web.phpに以下の記載が追加される。

routes/web.php
()
Route::resource('users', 'UserController');

// 以下が追加される
Auth::routes();

Route::get('/home', 'HomeController@index')->name('home');

route::listに以下のルーティングが追加される。

$ php artisan route:list
|        | GET|HEAD  | home                   | home             | App\Http\Controllers\HomeController@index                              | web,auth     |
|        | POST      | login                  |                  | App\Http\Controllers\Auth\LoginController@login                        | web,guest    |
|        | GET|HEAD  | login                  | login            | App\Http\Controllers\Auth\LoginController@showLoginForm                | web,guest    |
|        | POST      | logout                 | logout           | App\Http\Controllers\Auth\LoginController@logout                       | web          |
|        | POST      | password/email         | password.email   | App\Http\Controllers\Auth\ForgotPasswordController@sendResetLinkEmail  | web,guest    |
|        | GET|HEAD  | password/reset         | password.request | App\Http\Controllers\Auth\ForgotPasswordController@showLinkRequestForm | web,guest    |
|        | POST      | password/reset         | password.update  | App\Http\Controllers\Auth\ResetPasswordController@reset                | web,guest    |
|        | GET|HEAD  | password/reset/{token} | password.reset   | App\Http\Controllers\Auth\ResetPasswordController@showResetForm        | web,guest    |
|        | GET|HEAD  | register               | register         | App\Http\Controllers\Auth\RegisterController@showRegistrationForm      | web,guest    |
|        | POST      | register               |                  | App\Http\Controllers\Auth\RegisterController@register                  | web,guest    |

この時点で/loginにアクセスするとログイン画面が表示される。

layouts/app.blade.php

make:authで作成されます。bootstrapのnav-barで実装されていて
ログインしていないと「ログイン」「登録」メニューが表示され
ログインすると「ログイン」「登録」が非表示、
代わりにログインユーザメニューと「ログアウト」のサブメニューが表示される。

このapp.blade.phpでコンテンツ部と分けられているので
既存のユーザー管理画面もそれに倣って変更する。

@yield('content')でコンテンツ部を表示するように設定。

*.blade.phpの設定

@extends('layouts.app');で上記レイアウトファイルを呼び出す。
@section('content')~@endsection('content')で
囲んだ内容が展開される

認証の実装

各コントロールのconstructで行う。
ユーザーコントロールのconstructで設定する

app/Http/Constrollers/UsersController.php
public function __construct()
{
    $this->middleware('auth'); // 全アクセスにログイン認証が必要
    // ->except・・・認証を除外するアクション配列
    // ->only・・・認証が必要なアクション配列
}

php artisan route:listでusers系のアクションのmiddleware列で
authが追加されているのが確認できる。

ログイン後、/homeに遷移するようになっています。
変える場合はapp/Http/Conrollers/Auth/配下のファイルの$redirectToの値を変更する
RegisterController.php
VerificationController.php
ResetPasswordController.php
LoginController.php

nav-barへのユーザー一覧メニューの追加

app.blade.phpにメニューを追加。ただしログインしている場合

resources/views/layouts/app.blade.php
                    <!-- Left Side Of Navbar -->
                    <ul class="navbar-nav mr-auto">
                        <!-- Main Menu Links -->
                        @auth
                            <li class="nav-item">
                                <a class="nav-link" href="{{ url('users') }}">{{ __('Users') }}</a>
                            </li>
                        @endauth
                    </ul>

@auth~@endauthでログイン状態の条件、
@guest~@endguestでゲスト(非ログイン)状態の条件

この時点では、だれでもユーザー登録がし放題なので登録時にメール確認する機能を追加

メール確認

Laravel 5.8 メール確認
上記の実装通りに進める。

モデルの修正

app/User.php
//class User extends Authenticatable
class User extends Authenticatable implements MustVerifyEmail
{
()

DB修正

usersテーブルにemail_verified_atカラムを追加する必要があるが5.8では標準で含まれている。

ルーティングを変更

routes/web.php
//Auth::routes();
Auth::routes(['verify' => true]);

これだけでメール確認の機能が実装されます。
但し、厳密にはメールでの登録手続きが完了する前にログインできてしまうので
認証方法を変える必要がある。

middlewareのverifiedの設定

各コントローラクラスのコンストラクタでmiddlewareを呼び出し制限する。

app/Http/Controllers/UserController.php

public function __construct()
{
    // ログイン済(メール認証済不問)
    // $this->middleware('auth');
    // メール認証済
    $this->middleware('verified'); // usersの全アクションにメール認証済が必要
}
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3