Laravel入門トップページ


目次

  1. Composerのダウンロードとインストール
  2. コメント掲示板を作成してみよう
  3. リレーションシップを使いこなそう
  4. ユーザ認証の機能を実現しよう
    1. 概要と準備
    2. メールの設定
    3. 認証機能の実装
    4. 学籍番号の登録とログイン名
    5. 登録メールアドレスの認証
    6. パスワードのリセット
    7. プロフィールの表示
    8. パスワードの変更
  5. マルチ認証の機能を実現しよう
  6. MongoDB に接続しよう
  7. キューを利用しよう
  8. コマンド(コンソール)を利用しよう
  9. 本番環境にデプロイしよう

ユーザ認証の機能を実現しよう

Profileページの作成

ここではユーザが自身のProfileを確認できるようにしよう.

目次に戻る

ルートを定義する

routes/web.php (抜粋)
Route::get('/', function () {
    return view('welcome');
});

Route::get('/auth/verifyemail/{token}', 'Auth\RegisterController@verify');

Auth::routes();

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

Route::get('/users/{id}', 'UsersController@show');

目次に戻る

コントローラの生成

artisan コマンドでコントローラを作成する.この作業で app/Http/Controllers/UsersController.php が生成される.

[GakuinHana@rin06 laravelUser]$ php artisan make:controller UsersController ⏎
Controller created successfully.
[GakuinHana@rin06 laravelUser]$

生成されたファイルを編集し,show 関数を作る.

app/Http/Controllers/UsersController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UsersController extends Controller
{
  public function show($id)
  {
    dd($id);
  }
}

目次に戻る

認証を要求する

Webサーバを再起動し,ログアウトした状態で /users/1 や /users/2 にアクセスしてみる.ログインすることなく接続できてしまう.UsersController のすべてのアクションに対して認証を要求するために,次のような関数を追加する.

app/Http/Controllers/UsersController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

class UsersController extends Controller
{
  public function __construct()
  {
    // コントローラの全アクションに対して認証を要求する
    $this->middleware('auth');
  }

  public function show($id)
  {
    dd($id);
  }
}

上の関数を追加することで,/users/1 などを指定するとログイン画面に転送されるようになった.

目次に戻る

Profile 取得する

認証ができたので,自分の Profile を取得しよう.

app/Http/Controllers/UsersController.php
<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;

class UsersController extends Controller
{
  public function __construct()
  {
    // コントローラの全アクションに対して認証を要求する
    $this->middleware('auth');
  }

  public function show($id)
  {
    $user = User::find($id);
    dd($user);
  }
}

/users/1 や /users/2 を表示してみよう.ユーザ情報を取得できている.

change_pass-1

/users/1 や /users/2 を表示してみよう.ユーザ情報を取得できている.ただし,他人の情報まで表示できてしまうのは問題である.自分の情報だけを表示できるようにしよう.

app/Http/Controllers/UsersController.php (抜粋)
  public function show($id)
  {
    if (\Auth::user()->id != $id){
      // ログインしているユーザidと表示しようとしている$idが異なる
      return redirect('/home');
    }
    $user = User::find($id);
    dd($user);
}

上の編集の結果,他人のページを表示しようとしたときには /home へ強制的にリダイレクトされ,自分のProfileだけが表示できるようになった.

目次に戻る

ビューを追加する

コントローラを修正して,ビューにユーザ情報を渡すようにする.

app/Http/Controllers/UsersController.php (抜粋)
  public function show($id)
  {
    if (\Auth::user()->id != $id){
      // ログインしているユーザidと表示しようとしている$idが異なる
      return redirect('/home');
    }
    $user = User::find($id);
    return view('users.show')
        ->with('user', $user);
}

resources/views/users フォルダを作成し,この中に show.blade.php を作成する.このファイルに次のような内容を記述する.なお,resources/views/home.blade.php をコピーして一部変更するだけで良い.

resources/views/users/show.blade.php
@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Profile</div>

                <div class="panel-body">
                    @if (session('status'))
                        <div class="alert alert-success">
                            {{ session('status') }}
                        </div>
                    @endif

                    <dl>
                      <dt>id</dt>
                      <dd>{{ $user->id }}</dd>
                      <dt>name</dt>
                      <dd>{{ $user->name }}</dd>
                      <dt>email</dt>
                      <dd>{{ $user->email }}</dd>
                      <dt>login_id</dt>
                      <dd>{{ $user->login_id }}</dd>
                      <dt>created_at</dt>
                      <dd>{{ $user->created_at }}</dd>
                    </dl>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

これで /users/1 から自分の情報を表示できるようになった.

change_pass-2

目次に戻る

/home から自分のprofileページへのリンクを設置する.

resources/views/layouts/app.blade.php (抜粋)
  <li class="dropdown">
    <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
        {{ Auth::user()->name }} <span class="caret"></span>
    </a>

    <ul class="dropdown-menu" role="menu">
        <li>
            <a href="{{ route('logout') }}"
                onclick="event.preventDefault();
                         document.getElementById('logout-form').submit();">
                Logout
            </a>

            <form id="logout-form" action="{{ route('logout') }}" method="POST" style="display: none;">
                {{ csrf_field() }}
            </form>
        </li>
        <li>
          <a href="{{ action('UsersController@show', Auth::user()->id) }}">
            Profile
          </a>
        </li>
    </ul>
</li>

これで各ユーザの /home からProfileへリンクできるようになった.

/change_pass-3

目次に戻る