やる、Laravel5.7を。その2「インストールして認証とかを試す」

Laravel

お疲れ様です.

RainGearの杏です.

 

はじめに

前回,開発環境が構築できたのでLaravelをインストールして軽く試してみようと思います.

一応,最終的には,モデリングした3DCGをアップロード/閲覧できるようなアプリケーションを作ろうかと考えています.

そうなるとthree.jsとかを使うことになるのカモ知れません.LaravelはLaravel MixというやつでJavaScriptのコンパイルとかも出来るみたいなので次回以降で試していきたいと思います.

今回は,インストールして認証周りの機能を試してみたいと思います.

 

環境

Windows10
PHP 7.1.9
Laravel 5.7
Vagrant 2.2.0
VirtualBox 5.2.20
Git 2.18.1

 

インストール

開発環境の構築はすでにすんでいるので,開発環境にLaravelをインストールします.

公式ドキュメントのインストールの項目を参考に作業します.

 

vagrant upで仮想マシンを起動します.

vagrant sshで仮想マシンにSSH接続します.

Homesteadの公開ディレクトリに移動します.

composer global require laravel/installerコマンドを実行するとLaravelインストーラという,Laravelのプロジェクトを作成するためのパッケージ?をインストールします.

composer global require laravel/installer

PATHの追加が必要らしいけどHomesteadだと無くても動作する.

すでに設定されているのカモ.

 

これでlaravel new project_nameみたいなコマンドでLaravelのプロジェクトを無限に生成できます.このときも処理の内容としてはcomposerでいろんなパッケージをDLしています.

 

今回はlara_auth_sampleという名前のプロジェクトにしたいと思います.

laravel new lara_auth_sample

 

ちなみにComposerでグローバルでインストールしたパッケージはcomposer global showで一覧で見ることができます.

2018年11月現在Laravel installerのバージョンはv2.0.1

laravel new コマンドは常に最新のバージョンがインストールされるっぽい

バージョンを指定する場合installerは使わず

composer create-project --prefer-dist laravel/laravel blog "5.5.*"

のようなコマンドでプロジェクトを作成するらしい.

今回は最新(5.7)だからよかったけど,LTS(5.5)などを使う場合注意が必要そうに思えた.

 

Gitリポジトリを作成

プロジェクトが作成できたら,不具合があったとき,プログラムを元に戻せるようにするため,

Gitリポジトリを作成します.

 

homstead.ymlにドメインを追加

homstead.ymlを編集してドメイン(sites項目)を追加します.

hostsファイルの変更,vagrant reload --provisionも忘れずに

 

これでブラウザからアプリケーションを表示できるようになりました.

追加したドメインにアクセスしてみると正常にインストールできていることが確認できました.

 

設定

プロジェクトが作成できたら,プロジェクトの設定を行います.

公式ドキュメントの設定の項目を参考にします.

 

設定ファイルはconfigディレクトリの中に,項目ごとにphpファイルとして置かれています.

コメントがしかっり書いてあるから,それを読んで変更すれば良いそうです.(はい)

 

環境設定?は.envというファイルに設定します..envファイルが無い場合,.env.exampleというファイルをコピーしリネームします.(Composerでインストールすると自動で生成されるらしい.composer使わない方法とは??)

.envにはデータベースの接続情報や,ブロードキャスト,Redis,メール,Pushなどの設定をするみたいです.(文字から察しただけでよくわからない)

 

現状設定すべきはデータベースの接続情報だと思うので,

DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=homestead
DB_USERNAME=homestead
DB_PASSWORD=secret

あたりを編集します.

Homestead向けの設定がすでに入力されています.

DB_DATABASEだけこれから作成するlara_auth_sampleというデータベースの名前に変更しておきます.

 

.envの内容は,プロジェクトのソースコードから値を取得するためのインターフェイスが用意されているらしいです.

 

.envファイルの設定はサーバー側の環境変数=PATHに上書きされる?みたいなことが書いてあるので,本番環境などではPATHを設定すれば良い?っぽいです.(本番用の.envを作成してもいいけどセキュリティ上良くないらしい)

 

データベース作成

設定が出来たら,プロジェクトで使用するデータベースを作成します.

この記事でやったような感じの操作でデータベースを作成します.

 

ログイン機能を実装してみる.

フレームワークのインストールは出来たので,本題はここから.

今回はログイン画面の作成を通して,全体的にフレームワークの機能を試してみたいと思います.

 

認証

公式ドキュメントの認証のページを参考にしてみます.

 

Artisanコマンド

まずArtisanというコマンド機能を使って,必要なコードを生成する.

Artisan(アーティザン?)によって様々なソースコードの生成などが行えるみたいです.

コマンドなどの操作は基本的にSSH接続した状態で実行します.

 

php artisan make:auth

まずphp artisan make:authコマンドを実行します

php artisan make:auth

Gitでバージョン管理をしているので,追加/変更されたファイルが分かります.

このコマンドでは

コントローラー(HomeController)の追加,テンプレートの追加,ルーティングの変更などが行われてるみたいです.

 

php artisan migrate

続いてphp artisan migrateコマンドを実行します.

php artisan migrate

このコマンドではマイグレーションが実行されました.

データベースにusersテーブル,password_resetsテーブルが追加されました.

マイグレーションの定義はdatabase/migrationsディレクトリに最初からあったみたいです.

 

ちなみに,データベースの操作にはEloquentというORMを使うらしい.

設定次第でプレーンなSQLでもいける?っぽい.それもまたアリ.

 

基本的にはこれで,アカウント登録ページ,ログインページ,パスワード再発行ページ,ホームページ(認証が必要なページの例)が,ロジックを含めいて作成できたみたいです.

 

試しにブラウザで/homeにアクセスすると,認証されていないので,ログインページにリダイレクトされます.

まだアカウントを登録していないので/registerにアクセスしてアカウントを作成します.

 

作成したアカウントでログインすると,アクセスできなかったhomeページへアクセスできるようになりました.

 

これでログインページが確認できました.

すでにコードが用意されていただけって感じもするけど,コマンドだけで簡単に認証機能が実装できました

んでもって,ここからコードを読み取っていけば,ほかの機能の実装にも応用できそう.

 

ビュー

ビュー(テンプレート)はresources/views/以下に生成された.

Bladeというテンプレートエンジンを使うらしい.

拡張子は.blade.php,PHPコードを埋め込む方法もあるらしい.

新しい構文覚えるのダルいけど,適宜公式ドキュメントを確認すればなんとかなるだろ

 

パスのカスタマイズ

ユーザー認証に成功したときにリダイレクトするページを変更する場合,LoginController、RegisterController、ResetPasswordController、VerificationControllerのredirectToプロパティを変更するみたい.

 

リダイレクトにロジック(条件によってリダイレクト先を変えるなど)が必要な場合,redirectToメソッドを定義します.

protected function redirectTo() {
return '/path';
}

redirectToメソッドは、redirectToプロパティよりも優先されるらしい.

 

ちなみに認証のビジネスロジックは各Controllerに use AuthenticatesUsers;のように,トレイトとして記述されている.

トレイトはPHPの新しめ?の言語仕様?機能?らしい,あんまし馴染みがなかったのでロジックがどこにあるのか迷った.

 

ユーザー名のカスタマイズ

標準だとログイン時にユーザー名のフォームに入力するのはemailですが,ほかのカラムでログインさせたい場合,LoginControllerでusernameメソッドを定義します.
public function username() {
return 'username';
}

 

usernameかemail,どっちでもログインできるようにしたいけど,トレイトしてるクラスをオーバーライドすればよいんだろうか.

ここらへんから察するに,ビジネスロジック?はクラスで定義してコントローラーからトレイトで使うようにしろってことなんだろうか?もしくはサービスコンテナを使うか,もしくはContorollerにひたすら含めるか(これをすると謎の勢力に消されるので注意).

 

ガードのカスタマイズ

ガードってなんだ.認証をガードするロジックのことかな??

 

バリデーション/保管域のカスタマイズ

登録するユーザー情報のバリデーションや,登録ロジックを変更したい場合RegisterControllerクラスを編集するらしい.

 

Authファサード

Authファサードを使えば,アプリケーション内でログインしているユーザーの情報が取得できるらしい.

use Illuminate\Support\Facades\Auth;

// 現在認証されているユーザーの取得
$user = Auth::user();

// 現在認証されているユーザーのID取得
$id = Auth::id();

ユーザーページでユーザー情報を表示したいときとかに使う?

ミドルウェア(リクエストに対するフィルターみたいなもの?)内の処理でも使えるらしい.

 

ルートの保護

どのルートへのリクエストを認証の保護の対象にするかはauthミドルウェアを利用します.

ルーティング,またはコントローラーからauthミドルウェアを呼び出すことで,保護の対象にします.

HomeControllerではコントローラーから呼び出しています.
これは,Controllerで定義すると,どのページが保護対象なのか分かりにくくなる気がします.

 

ルート定義で設定するにはweb.phpなどにチェーンメソッドで記述するだけ.

こっちのほうが定義がControllerごとに定義がバラつかないから良い気がする.

 

ちなみにミドルウェアとはリクエストに対するフィルター処理のようなものらしい.authミドルウェアは,リクエストが認証済みかをフィルタリングするミドルウェアということになる.

 

未認証ユーザーのリダイレクト

認証していないユーザーは,標準だとloginページへリダイレクトされます.

これは,app/Http/Middleware/Authenticate.phpのredirectTo関数で変更できるらいしい.

 

ガードの指定

ちょっとわからないです.保留

 

認証回数制限

一定回数ログインに失敗したら,1分間ログインできなくなるロジックが標準で設定されているらしい.

LoginControllerからIlluminate\Foundation\Auth\ThrottlesLoginsトレイトで実装されているらしい.ロジックを変えたい場合コントローラー側から上書きすれば良いのかな?

 

パスワードリセット

パスワードリセットにはサーバーがメールの送信に対応していないといけません.

Homesteadで立ち上がるサーバーはメールを送信できないので注意

 

Laravel Socialite

Laravel Socialiteというパッケージを使うとFacebook、Twitter、LinkedIn、Google、GitHub、Bitbucketなどのアカウントによる認証を実装できるらしい

 

BASIC認証

使わなそうなので放置.

 

APIの認証

今のところはAPIは実装はしないと思うし,よくわからないので保留

 

まとめ

ログイン機能の構築を通してLaravelに実装されている機能の多くに触れることができた.

  • Artisan(コマンドライン)によるコードの生成
  • ルーティング
  • ミドルウェア
  • コントローラー
  • メール
  • Bladeテンプレート
  • マイグレーション機能
  • Eloquent(ORM)
  • ファザード
  • イベント

などなど,Laravelを使った開発の流れがなんとなく分かった気がする.

 

Laravelが使いやすいかと言われたら,正直よくわからない.

少なくとも私が実装したいと考えるような機能はだいたい実装できそうなので困ることはなさそう.

個人的にフレームワークはORMの使いやすさが重要だと思っている.

Webアプリケーションなんて結局はDBのラッピングだと思っているので,効率よくSQLを処理できればいいでしょみたいな印象でいる.

だからまあ,SQLを良い感じに操作できるインターフェースが実装されていればそれで良いんだけど,最近はどのORMでも似たような書き心地な気がする.

あと,トレイトというPHPの機能を結構使う,あんまり使ったことがなかったので戸惑うけど,LaravelというよりPHPの新しめ(?)の言語仕様みたいなので,覚えておいて損は無いという感じかな?

そのほか,Laravelは積極的に新しい設計思想みたいのを取り入れているっぽくて,ドキュメントにも聞きなれない用語がちょくちょく出てきて焦る…

あと,テンプレートに関してはいちいち構文を覚え直したくないので,なんなら全言語で統一して欲しい.

公式ドキュメントのUIはちょっと見辛い(項目を移動するたびに,ちっちゃいメニューボタンをクリックしてメニューを開き直す必要がある)

 

次回は,3DCGモデル閲覧システムの設計みたいなことをしていこうと思う.

あと,今回はあんまり(というかまったく)出てこなかったアセット関係の部分も試してみたい.もしかしたらそっちメインになるカモ

以上!

 

PHPフレームワーク Laravel入門

新品価格
¥3,240から
(2018/12/17 19:56時点)

Spread the love
コメントはまだありません

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

Python
Pythonオレオレオレオレチートシート

目次1 参考ページ2 環境の作り方2.1 インストール2.1.1 windowsの場合2.1.2 M …

Spread the love
PHP
PHP俺チートシート

PHPをコーディングする上で「これどうやんだっけ」みたいのをいちいちドキュメント確認とかしてたので, …

Spread the love
Laravel
やる,Laravelを.その3 Laravel Mix

お疲れさまですRainGearの杏です.   Laravelでの3Dモデルデータ閲覧システ …

Spread the love