Laravel5で社内専用サイト(2)

社内専用サイトですので、外部からのアクセスを制限しなければなりません。そこで、今日から認証およびアクセス制限のプログラムを作成していきたいと思います。作成するといってもLaravel5には、デフォルトで認証機能が付属しています。その認証機能を使用して作成していきます。

メッセージの日本語化

その前に、コメントやエラーメッセージを日本語化したいと思います。川瀬裕久氏から日本語変換のパッケージを提供していただいていますので、それを使用させていただきたいと思います。

ローカル環境(XAMPP)からインストールする場合は、コマンドプロンプトを起動し、下記のように入力します。

cd c:\xampp\htdocs\winroad
 composer require laravel-ja/comja5
 composer update
 php vendor\laravel-ja\comja5\main.php -a

実行環境(CentOSのVPSサーバー)からインストールする場合は、Tera Term(ターミナル)から、下記のように入力します。

cd /var/www/winroad
 composer require laravel-ja/comja5
 vendor/bin/comja5 -a

configファイルの設定

インストールしただけでは、エラーメッセージは、日本語にはなりません。config/app.phpのtimezoneとlacaleを変更します。

'timezone' => 'Asia/Tokyo',
 'locale' => 'ja',

usersテーブルの作成

artisanコマンドで、usersテーブルとpassword_resetテーブルを作成します。デフォルトのLaravel5にこの2つのテーブルのマイグレーションが用意されていますので、コマンドプロンプトから下記のartisanコマンドで、マイグレーションを実行します。

php artisan migrate

これで、migrationsテーブル、password_resetsテーブル、usersテーブルの3つのテーブルが自動生成されます。

尚、Userモデルは、デフォルトで提供されていますので、これを使用します。

新規ユーザーの作成

それでは、新規ユーザーを作成するためのロジックを記述していきたいと思いますが、その前にデフォルトで用意されているAuthControllerとPasswordControllerをルーターに登録します。

app/Http/routes.php

Route::controllers([
 'auth' => 'Auth\AuthController',
 'password' => 'Auth\PasswordController',
 ]);

新規ユーザーの作成は、UserControllerを作成してもいいのですが、せっかくAuthControllerがデフォルトで用意されていますので、それを利用したいと思います。

AuthControllerにgetCreate()メソッドと、postCreate()メソッドを下記のように追加作成します。

//ユーザーの新規作成
 public function getCreate()
 {
 return view('auth.create');
 }
public function postCreate(Request $request)
 {
 //バリデーション
 $val=$this->validator($request->all());
 if($val->fails()){
 return redirect()->intended($this->redirectPath())->withInput();
 }
 $user=$this->create($request->all());
 return redirect()->to('home');
}
  • 6行目:Requestクラスのタイプヒントを使用するために、ファイルの先頭の方にRequestクラスをインポートしておきます。
    use Illuminate\Http\Request;
  • 9行目:AuthController内のデフォルトのvalidator()メソッド(下記)を使用して、バリデーションを行います。
    protected function validator(array $data)
     {
     return Validator::make($data, [
     'name' => 'required|max:255',
     'email' => 'required|email|max:255|unique:users',
     'password' => 'required|confirmed|min:8',
     ]);
     }
  • 13行目:AuthController内のデフォルトのcreate()メソッド(下記)を使用して、ユーザーを登録します。
    protected function create(array $data)
     {
     return User::create([
     'name' => $data['name'],
     'email' => $data['email'],
     'password' => bcrypt($data['password']),
     ]);
     }

ユーザー作成のためのビューを作成します。まず、Twitter Bootstrapでベースレイアウトを作成します。

app/resources/views/tbs/base.blade.php

<!DOCTYPE html>
 <html lang="ja">
 <head>
 <meta charset="utf-8">
 <title>@yield('title')</title>
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1">
 <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css">
 </head>
 <body>
 @section('navbar')
 @show
 @section('sidebar')
 @show
 <div class="container" style="margin-top: 30px;">
 @yield('content')
 </div>
 @section('footer')
 @show
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.3/jquery.min.js"></script>
 <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/js/bootstrap.min.js"></script>
 </body>
 </html>
  • 11-12行目:ナビゲーションバーの挿入位置を確保しておきます
  • 13-14行目:サイドバーの挿入位置を確保しておきます。
  • 15-17行目:メインのコンテンツはここに挿入します。
  • 19-20行目:フッターの挿入位置を確保しておきます。

そして、新規作成のためのフォーム(コンテンツの中身)を下記のように作成します。

app/resources/views/auth/create.blade.php

@extends('tbs.base')
 @section('title','ユーザーの新規作成')
 @section('content')
 <div class="jumbotron">
 <h2 class="text-center">@yield('title')</h2>
 <form class="form-horizontal" method="POST">
 {!! csrf_field() !!}
 <div class="form-group">
 <label class="col-sm-2 control-label">お名前</label>
 <div class="col-sm-10">
 <input type="name" name="name" value="{{ old('name') }}" class="form-control" placeholder="name">
 @if($errors->first('name'))
 <p class='alert alert-danger'>{{ $errors->first('name') }}</p>
 @endif
 </div>
 </div>
 <div class="form-group">
 <label class="col-sm-2 control-label">Eメール</label>
 <div class="col-sm-10">
 <input type="email" name="email" value="{{ old('email') }}" class="form-control" placeholder="Email">
 @if($errors->first('email'))
 <p class='alert alert-danger'>{{ $errors->first('email') }}</p>
 @endif
 </div>
 </div>
 <div class="form-group">
 <label class="col-sm-2 control-label">パスワード</label>
 <div class="col-sm-10">
 <input type="password" name="password" class="form-control" placeholder="Password">
 @if($errors->first('password'))
 <p class='alert alert-danger'>{{ $errors->first('password') }}</p>
 @endif
 </div>
 </div>
 <div class="form-group">
 <label for="confirm" class="col-sm-2 control-label">パスワードの確認</label>
 <div class="col-sm-10">
 <input type="password" name="password_confirmation" class="form-control" id="password" placeholder="Password">
 </div>
 </div>
 <div class="form-group">
 <div class="col-sm-offset-2 col-sm-10">
 <button type="submit" class="btn btn-default">ユーザー登録</button>
 </div>
 </div>
 </form>
 </div>
 </div>
 @stop

それでは、下記の入力フォームからデータを入力してみます。

2015-08-10 10-27-36

下記のように無事データが保存されています。

2015-08-10 10-30-50

本日は、以上です。

このエントリーを含むはてなブックマーク Buzzurlにブックマーク livedoorクリップ Yahoo!ブックマークに登録

トラックバック&コメント

この投稿のトラックバックURL:

コメントをどうぞ

このページの先頭へ