Recommended
PDF
Vagrant で作る PHP 開発環境 [実践編]
PDF
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
PDF
Heroku で作る
スケーラブルな
PHP アプリケーション
PDF
PDF
PDF
Vagrant で PHP 開発環境を作る ハンズオン
PDF
PDF
PDF
Azure Websites で作るスケーラブルな PHP アプリケーション
PDF
PDF
Laravel ユーザなら知っておくべきAuthオートログイン
PDF
PDF
PDF
PDF
VagrantからDockerに開発環境を移行した時の話
PPTX
Pythonユーザのための構成管理入門 #pyconapac
PDF
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
PPTX
OpenShift from Easy way to Hard ? Way
PDF
PDF
PPTX
Ansibleを使ってdockerコンテナをプロビジョニングする
PDF
PDF
PDF
PPTX
PPTX
PPTX
PDF
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
PPTX
PDF
More Related Content
PDF
Vagrant で作る PHP 開発環境 [実践編]
PDF
もう XAMPP / MAMP はいらない!
Vagrant で作る PHP 開発環境
PDF
Heroku で作る
スケーラブルな
PHP アプリケーション
PDF
PDF
PDF
Vagrant で PHP 開発環境を作る ハンズオン
PDF
PDF
What's hot
PDF
Azure Websites で作るスケーラブルな PHP アプリケーション
PDF
PDF
Laravel ユーザなら知っておくべきAuthオートログイン
PDF
PDF
PDF
PDF
VagrantからDockerに開発環境を移行した時の話
PPTX
Pythonユーザのための構成管理入門 #pyconapac
PDF
レイヤードアーキテクチャを意識した PHPアプリケーションの構築 ver2
PPTX
OpenShift from Easy way to Hard ? Way
PDF
PDF
PPTX
Ansibleを使ってdockerコンテナをプロビジョニングする
PDF
PDF
PDF
PPTX
PPTX
PPTX
PDF
レイヤードアーキテクチャを意識したPHPアプリケーションの構築
Viewers also liked
PPTX
PDF
PDF
PDF
PPTX
[Laravel] CRUDアプリから一歩踏み出す3つのアプローチ
PPTX
PDF
MySQL・PostgreSQLだけで作る高速でリッチな全文検索システム
PPTX
PPTX
Phpフレームワーク 「laravel」でブログを作ろう
PDF
PHPでPostgreSQLとPGroongaを使って高速日本語全文検索!
PDF
Firebaseでのファイルアップロード処理と便利ライブラリの紹介
PDF
指の動きや遷移時等のアニメーションを生かしたUIのサンプル解説
PDF
カスタムトランジションやジェスチャーを生かしたUIの実装ポイント
PPTX
PPTX
PDF
PDF
PDF
デザイナーがXcodeを使って 開発効率をUPさせた 5つのエピソード + 現場エンジニアのコメント付き
PPTX
20151205フルスクラッチcms作成のノウハウ With Laravel
PPTX
Similar to 認証機能で学ぶ Laravel 5 アプリケーション
PPTX
PDF
KEY
KEY
PDF
PDF
WTM53 phpフレームワーク いまさらcodeigniter
PDF
More from Masashi Shinbara
PDF
PDF
PDF
PDF
Twilio を使えば簡単にできる アプリケーションと電話/SMS連携
PDF
How to learn Laravel5 application from Authentication
PDF
PHPコードではなく PHPコードの「書き方」を知る
PDF
PDF
PDF
PDF
PDF
PDF
PDF
Kansai PHP Users Group 2012年活動報告
KEY
認証機能で学ぶ Laravel 5 アプリケーション 1. 2. 3. 4. 5. 6. 7. こんな機能も
(c) 2015 Masashi Shinbara @shin1x1
• Cookieトークンによる自動ログイン
(Remeber me)
• Basic認証(要実装)
• ソーシャル認証(要実装 / Twitter等)
8. 9. 10. 11. 12. Controller Method
(c) 2015 Masashi Shinbara @shin1x1
• HTTPメソッド + パス
• GET /auth/register
=> getRegister()
• POST /auth/register
=> postRegister()
13. Routing - auth
(c) 2015 Masashi Shinbara @shin1x1
Method URI Action
GET¦HEAD /auth/register AuthController@getRegister
POST /auth/register AuthController@postRegister
GET¦HEAD /auth/login AuthController@getLogin
POST /auth/login AuthController@postLogin
GET¦HEAD /auth/logout AuthController@getLogout
14. Routing - password
(c) 2015 Masashi Shinbara @shin1x1
Method URI Action
GET¦HEAD /password/email PasswordController@getEmail
POST /password/email PasswordController@postEmail
GET¦HEAD /password/reset PasswordController@getReset
POST /password/reset PasswordController@postReset
15. 16. 17. Controller
<?php namespace AppHttpControllersAuth;
// (snip)
class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers;
public function __construct(Guard $auth, Registrar $registrar)
{
$this->auth = $auth;
$this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
}
}
コンストラクタインジェクション
18. Controller
<?php namespace AppHttpControllersAuth;
// (snip)
class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers;
public function __construct(Guard $auth, Registrar $registrar)
{
$this->auth = $auth;
$this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
}
}
ミドルウェア(ログイン済みなら、リダイレクト)
19. Controller
<?php namespace AppHttpControllersAuth;
// (snip)
class AuthController extends Controller
{
use AuthenticatesAndRegistersUsers;
public function __construct(Guard $auth, Registrar $registrar)
{
$this->auth = $auth;
$this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
}
}
トレイト
20. 21. Constructor Injection
public function __construct(Guard $auth, Registrar $registrar)
{
$this->auth = $auth;
$this->registrar = $registrar;
$this->middleware('guest', ['except' => 'getLogout']);
}
$auth = Guard クラスのインスタンス
$registar = Registarクラスのインスタンス
22. 23. 24. 25. 26. Trait
(c) 2015 Masashi Shinbara @shin1x1
• AuthControllerとPasswordController
• コンストラクタのみで、実処理はトレイトに実装
• 独自コントローラにもトレイトを再利用できる
27. Trait
public function getRegister()
{
return view('auth.register');
}
public function postRegister(Request $request)
{
$validator = $this->registrar->validator($request->all());
if ($validator->fails())
{
$this->throwValidationException(
$request, $validator
);
}
$this->auth->login($this->registrar->create($request->all()));
return redirect($this->redirectPath());
}
method
28. Trait
public function getRegister()
{
return view('auth.register');
}
public function postRegister(Request $request)
{
$validator = $this->registrar->validator($request->all());
if ($validator->fails())
{
$this->throwValidationException(
$request, $validator
);
}
$this->auth->login($this->registrar->create($request->all()));
return redirect($this->redirectPath());
}
method injection
29. 30. Service
(c) 2015 Masashi Shinbara @shin1x1
• コントローラから起動
(コントローラ以外からの呼び出しも可)
• ビジネスロジックを実装
• 永続化などは、Eloquent(モデル)に移譲
• GuardクラスとRegistrarクラス
31. Service - Registrar
class Registrar implements RegistrarContract
{
public function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
public function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}
validator builder
32. Service - Registrar
class Registrar implements RegistrarContract
{
public function validator(array $data)
{
return Validator::make($data, [
'name' => 'required|max:255',
'email' => 'required|email|max:255|unique:users',
'password' => 'required|confirmed|min:6',
]);
}
public function create(array $data)
{
return User::create([
'name' => $data['name'],
'email' => $data['email'],
'password' => bcrypt($data['password']),
]);
}
}
business logic
33. Controller(with Trait)
public function postRegister(Request $request)
{
$validator = $this->registrar->validator($request->all());
if ($validator->fails())
{
$this->throwValidationException(
$request, $validator
);
}
$this->auth->login($this->registrar->create($request->all()));
return redirect($this->redirectPath());
}
call service
call servicecall service
34. 35. 36. Model(Eloquent)
class User extends Model implements AuthenticatableContract,
CanResetPasswordContract
{
use Authenticatable, CanResetPassword;
protected $table = 'users';
protected $fillable = ['name', 'email', 'password'];
protected $hidden = ['password', 'remember_token'];
}
Contract(interface)
Trait
37. 38. まとめ
(c) 2015 Masashi Shinbara @shin1x1
• 認証実装は、良いサンプル実装
• 役割を分け、シンプルな実装を
• こうしないといけないわけじゃない
• Laravelの実装で、アーキテクチャを学ぶ
39.