SlideShare una empresa de Scribd logo
1 de 28
Descargar para leer sin conexión
Copyright © Xchange Solutions All right reserved.
Fukuoka.php Vol.19
Laravelの認証について
株式会社エクスチェンジ ソリューションズ
野田 健夫
2016.10.20
2
Copyright © Xchange Solutions All right reserved.
こんにちは!
株式会社エクスチェンジ ソリューションズ
野田 健夫(のだたけお)
https://twitter.com/nodatakeo
https://www.facebook.com/nodatakeo
3
Copyright © Xchange Solutions All right reserved.
認証ページ
認証ページを作る目的。
 ユーザー識別
 アクセス制限、権限制御
 ユーザーごとのサービスカスタマイズ
Webサービスの実装において定番機能。
毎度、実装していると思います。
4
Copyright © Xchange Solutions All right reserved.
Laravelにおける認証の仕組み
 認証は、middlewareを使って実現。
 middlewareは、StackPHPというライブラリをベース
にしている。
http://stackphp.com/より引用
Symfonyの HttpKernelInterfaceを使う前提はあるが、フレームワーク
に依存しない汎用性の高いミドルウェアを作ることができる。
Appがコアとなる処理
Session/Authがミドルウェア部分
5
Copyright © Xchange Solutions All right reserved.
認証を処理するmiddlewareの仕組み
Pipeline Design Pattern による実装
send() then()
through()
TASK1 TASK2 TASK3 ….
(new Pipeline($this->app))
->send($request)
->through($this->middleware)
->then($this->dispatchToRouter());
※Illuminate¥Foundation¥Http¥Kernelより一部省略して引用。
※Pipelineをarray_reduceを使って関数型の書き方で実装。
← 各タスクに流すリクエスト情報
← middlewareの配列
← 最終的にControllerのメソッドへ
Pipelineに処理を見立てる
6
Copyright © Xchange Solutions All right reserved.
Laravelで認証ページを作る方法
1. ひな形(scaffold)を使う
2. 自分で実装する
3. その他
1. BASIC認証
2. OAuth認証(クライアント)
7
Copyright © Xchange Solutions All right reserved.
ひな形(scaffold)を使ってみよう
laravel new (プロジェクト名)
cd (プロジェクト名)
chmod 777 -R storage/
※.env ファイルのDB設定、メールサーバー設定を調整
php artisan make:auth
php artisan migrate
プロジェクトを作成
認証のひな形を作成
8
Copyright © Xchange Solutions All right reserved.
ひな形のルーティング情報
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | | App¥Http¥Controllers¥HomeController@index | web,auth |
| | GET|HEAD | login | login | App¥Http¥Controllers¥Auth¥LoginController@showLoginForm | web,guest |
| | POST | login | | App¥Http¥Controllers¥Auth¥LoginController@login | web,guest |
| | POST | logout | | App¥Http¥Controllers¥Auth¥LoginController@logout | web |
| | POST | password/email | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@showLinkRequestForm | web,guest |
| | POST | password/reset | | App¥Http¥Controllers¥Auth¥ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token} | | App¥Http¥Controllers¥Auth¥ResetPasswordController@showResetForm | web,guest |
| | GET|HEAD | register | | App¥Http¥Controllers¥Auth¥RegisterController@showRegistrationForm | web,guest |
| | POST | register | | App¥Http¥Controllers¥Auth¥RegisterController@register | web,guest |
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
ルーティング情報をチェック
php artisan route:list
※赤枠が追加された認証のひな形部分
9
Copyright © Xchange Solutions All right reserved.
認証ページの種類
登録ページ(/register)
ログインページ(/login)
パスワードリセットページ(/password/reset)
ホーム(/home)
ログアウト(/logout)
ログイン認証前に
使うページ
ログイン認証後に
使うページ
10
Copyright © Xchange Solutions All right reserved.
ひな形のルーティング情報:認証前
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | | App¥Http¥Controllers¥HomeController@index | web,auth |
| | GET|HEAD | login | login | App¥Http¥Controllers¥Auth¥LoginController@showLoginForm | web,guest |
| | POST | login | | App¥Http¥Controllers¥Auth¥LoginController@login | web,guest |
| | POST | logout | | App¥Http¥Controllers¥Auth¥LoginController@logout | web |
| | POST | password/email | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@showLinkRequestForm | web,guest |
| | POST | password/reset | | App¥Http¥Controllers¥Auth¥ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token} | | App¥Http¥Controllers¥Auth¥ResetPasswordController@showResetForm | web,guest |
| | GET|HEAD | register | | App¥Http¥Controllers¥Auth¥RegisterController@showRegistrationForm | web,guest |
| | POST | register | | App¥Http¥Controllers¥Auth¥RegisterController@register | web,guest |
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
HTTPメソッド名 URI情報
Action情報
(Controller層)
Middleware情報
(Filter層)
認証前に使うページに指定されているmiddleware
web, guest
11
Copyright © Xchange Solutions All right reserved.
認証の仕組み(認証前)
Controller層
Filter層
リクエスト レスポンス
認証情報があれば、/home
にリダイレクトするmiddleware
セッション情報を取り扱う
middlewareグループ
※middlewareは、App¥Http¥Kernelにて定義
web
guest
12
Copyright © Xchange Solutions All right reserved.
ひな形のルーティング情報:認証後
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | | App¥Http¥Controllers¥HomeController@index | web,auth |
| | GET|HEAD | login | login | App¥Http¥Controllers¥Auth¥LoginController@showLoginForm | web,guest |
| | POST | login | | App¥Http¥Controllers¥Auth¥LoginController@login | web,guest |
| | POST | logout | | App¥Http¥Controllers¥Auth¥LoginController@logout | web |
| | POST | password/email | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@showLinkRequestForm | web,guest |
| | POST | password/reset | | App¥Http¥Controllers¥Auth¥ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token} | | App¥Http¥Controllers¥Auth¥ResetPasswordController@showResetForm | web,guest |
| | GET|HEAD | register | | App¥Http¥Controllers¥Auth¥RegisterController@showRegistrationForm | web,guest |
| | POST | register | | App¥Http¥Controllers¥Auth¥RegisterController@register | web,guest |
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
HTTPメソッド名 URI情報
Action情報
(Controller層)
Middleware情報
(Filter層)
認証後に使うページに指定されているmiddleware
web, auth
13
Copyright © Xchange Solutions All right reserved.
認証の仕組み(認証後)
Controller層
Filter層
リクエスト レスポンス
認証情報がなければ、
AuthenticationExceptionを
投げるmiddleware
その後、App¥Exceptions¥Handler.php
でルーティング名 ‘login’へリダイレクト
セッション情報を取り扱う
middlewareグループ
※middlewareは、App¥Http¥Kernelにて定義
web
auth
14
Copyright © Xchange Solutions All right reserved.
補足:ルーティング名とは?
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
| Domain | Method | URI | Name | Action | Middleware |
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
| | GET|HEAD | / | | Closure | web |
| | GET|HEAD | api/user | | Closure | api,auth:api |
| | GET|HEAD | home | | App¥Http¥Controllers¥HomeController@index | web,auth |
| | GET|HEAD | login | login | App¥Http¥Controllers¥Auth¥LoginController@showLoginForm | web,guest |
| | POST | login | | App¥Http¥Controllers¥Auth¥LoginController@login | web,guest |
| | POST | logout | | App¥Http¥Controllers¥Auth¥LoginController@logout | web |
| | POST | password/email | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@sendResetLinkEmail | web,guest |
| | GET|HEAD | password/reset | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@showLinkRequestForm | web,guest |
| | POST | password/reset | | App¥Http¥Controllers¥Auth¥ResetPasswordController@reset | web,guest |
| | GET|HEAD | password/reset/{token} | | App¥Http¥Controllers¥Auth¥ResetPasswordController@showResetForm | web,guest |
| | GET|HEAD | register | | App¥Http¥Controllers¥Auth¥RegisterController@showRegistrationForm | web,guest |
| | POST | register | | App¥Http¥Controllers¥Auth¥RegisterController@register | web,guest |
+--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+
ルーティング情報をチェック
php artisan route:list
ルーティング名。
ヘルパー関数 route() を使ってURLを呼び
出せるようになります。
例:route(‘login’)
15
Copyright © Xchange Solutions All right reserved.
補足: Routing Annotationの場合の指定例
/**
* トップページ
* @Get(“/", as="top.get")
* @Post(“/", as="top.post")
* @Get("/index.html", as="top.index.get")
* @Post("/index.html", as="top.index.post")
* @Middleware({"web", "auth:web"})
* @param Request $request
* @return Response
* @throws IllegalParameterException
*/
ルーティング名
16
Copyright © Xchange Solutions All right reserved.
独自実装する場合①
config/auth.phpにGuardとProviderの設定を追加。
/*
|-----------------------------------------
| Authentication Guards
|-----------------------------------------
*/
// 認証ガード
'guards' => [
'web' => [
'driver' => 'session',
'provider' => 'users',
],
'api' => [
'driver' => 'token',
'provider' => 'users',
],
//追加 for admin
'admin' => [
'driver' => 'session', // セッション認証
'provider' => 'admins', // 対応するプロバイダー
],
],
/*
|-----------------------------------------
| User Providers
|-----------------------------------------
*/
// 認証プロバイダー
'providers' => [
'users' => [
'driver' => 'eloquent',
'model' => App¥User::class,
],
'admins' => [
'driver' => 'eloquent',
'model' => App¥Admin::class,
],
],
※driverはeloquent/databaseをサポート
※driverはsession/tokenをサポート
Guard(認証種別) Provider(Guardに対応する認証モデル情報)
17
Copyright © Xchange Solutions All right reserved.
独自実装する場合②
認証インターフェイス
Authenticatable
Illuminate¥Contracts¥Auth¥Authenticatable
I
認証する対象モデルに対してAuthenticatableのインターフェイスを
適用&Authenticatableを実装したトレイトを組み込み
Illuminate¥Auth¥Authenticatable as AuthenticableTrait
認証トレイトAuthenticatableTraitT
※モデルの対象となるキー名を設定する。
認証対象としたいモデル
18
Copyright © Xchange Solutions All right reserved.
独自実装する場合③
Guardに対応するログイン・ログアウトをControllerに実装。
/**
* ログイン処理
* @Post("admin_tools/login" , as="admin.login.post")
* @return View
*/
public function postLogin() {
// 認証
$credential = [
'login_id' => Input::get('login_id'),
'password' => Input::get('login_pw'),
'status' => 1,
];
if (Auth::guard('admin')->attempt($credential)) {
// ログイン成功
return redirect(route(‘admin.top’));
}
// ログイン失敗
$errors->add(‘login_id’, ‘ログインIDまたはパスワードに誤りがあります。’);
return view("admin.login", compact('errors'));
}
/**
* ログイン表示
* @Get("admin/login" , as="admin.login.get")
* @return View
*/
public function login() {
if (Auth::guard('admin')->check()) {
// ログイン済みならメニューへ
return redirect(route("admin.top"));
}
$errors = new MessageBag();
return view("admin.login", compact('errors'));
}
/**
* ログアウト処理+表示
* @Get(“admin_tools/logout” , as=“admin.logout”)
* @return View
*/
public function logout() {
if (!Auth::guard('admin')->check()) {
Log::debug('Not logined.');
return redirect(route("admin.login.get"));
}
Auth::guard('admin')->logout();
return view("admin.logout");
}
※guardの種別を指定しない場合、デフォルトのguardが使用される。
ログイン表示 ログイン処理+リダイレクト
ログアウト表示
19
Copyright © Xchange Solutions All right reserved.
独自実装する場合④
auth middleware を拡張
/**
* Handle an incoming request.
*
* @param ¥Illuminate¥Http¥Request $request
* @param ¥Closure $next
* @param string $guard
* @return mixed
*
* @throws ¥Illuminate¥Auth¥AuthenticationException
*/
public function handle($request, Closure $next, $guard)
{
if ($this->auth->guard($guard)->check()) {
return $next($request);
}
// $guard の種類によってログイン表示先を変更
return redirect(route($guard.".login"));
}
参考:Illuminate¥Auth¥Middleware¥Authenticate
Guardの種類に応じてログ
インページをリダイレクト
するような場合の実装例
20
Copyright © Xchange Solutions All right reserved.
独自実装する場合⑤
認証をかけたいルーティング情報にmiddlewareを設定
* @Middleware({"web", "auth:admin"})
* @Middleware({"web", "auth:web"})
設定で指定したGuardの種
類をmiddlewareの引数に指
定する。
※上記は Routing Annotationで指定した例
21
Copyright © Xchange Solutions All right reserved.
認証の基本は、auth middleware
Controller層
Filter層
リクエスト レスポンス
認証情報がなければ、対応するGuard
に基づくログインページへリダイレク
トするmiddleware。
セッション情報を取り扱う
middlewareグループ
※middlewareは、App¥Http¥Kernelにて定義
web
auth:(Guard種別)
22
Copyright © Xchange Solutions All right reserved.
その他:BASIC認証のmiddleware
Controller層
Filter層
リクエスト レスポンス
BASIC認証を行うMiddleware
※middlewareは、App¥Http¥Kernelにて定義
auth.basic
対象となるURIのmiddlewareに指定。
23
Copyright © Xchange Solutions All right reserved.
その他:OAuth client+Auth middleware
composer require laravel/socialite
インストール方法
config/app.phpに以下を追加
設定方法
'providers' => [
:
// Other service providers...
Laravel¥Socialite¥SocialiteServiceProvider::class,
],
'aliases' => [
:
// Additional aliases
'Socialite' => Laravel¥Socialite¥Facades¥Socialite::class,
],
24
Copyright © Xchange Solutions All right reserved.
その他:OAuth client+Auth middleware
config/services.phpに以下を追加。.envにも対応する値を設定。
設定方法
'facebook' => [
'client_id' => env('FACEBOOK_ID'),
'client_secret' => env('FACEBOOK_SECRET'),
'redirect' => env('FACEBOOK_CALLBACK_URL'),
],
25
Copyright © Xchange Solutions All right reserved.
その他:OAuth client+Auth middleware
OAuthクライアント OAuthサーバー
redirect ログインページ
client_id
redirect_uri
scope
state
ログインOKならば
コールバック
callback
code (認可コード)
state
①
②
③④
callback の中でユーザー情報を取得
し、会員登録・ログイン処理を行う。
redirectでOAuthサーバーへリダイ
レクト
26
Copyright © Xchange Solutions All right reserved.
その他:OAuth client+Auth middleware
/**
* OAuthサーバーへのリダイレクト
* @Get(“facebook/redirect”, as=“facebook.redirect”)
* @return response
*/
public function redirectToProvider()
{
return Socialite::driver('facebook')->redirect();
}
/**
* OAuthサーバーからのコールバック
* @Get(“facebook/callback”, as=“facebook.callback”)
* @return response
*/
public function handleProviderCallback(SocialAccountService $service)
{
// Oauthサーバーからユーザー情報の取得
$socialUser = Socialite::driver('facebook')->user();
// ユーザー情報の登録
$user = User::firstOrCreate([
‘nickname’ => $socialUser->nickname,
‘email’ => $socialUser->email,
‘token’ => $socialUser->token,
‘refresh_token’ => $socialUser->refreshToken,
‘expires_in’ => $socialUser->expiresIn,
]);
// ログイン状態とする
Auth::guard(‘web’)->login($user);
// リダイレクト
return redirect()->to('/home');
}
OAuthServerへのリダイレクト(Pg22①) OAuthServerからのコールバック(Pg22④)
Controllerの実装例
Socialite::driver(Oauthサーバー種別)->user();
以下が実行される。
(1) 認可コードよりアクセストークン取得
(2) アクセストークンを使ってユーザー情報
取得
27
Copyright © Xchange Solutions All right reserved.
よくあるハマりどころ
 “web“middlewareグループの指定漏れ
→Sessionを使って認証情報を保持しているため、認証状態を
チェックする必要のあるURIにおいては、必ず指定する必要が
あります。
 remember_tokenがないというエラーがでる。
→remember_tokenを無効化する対応を別途追加する必要があ
ります。
※http://laravel.io/forum/05-21-2014-how-to-disable-remember-token
28
Copyright © Xchange Solutions All right reserved.
まとめ
 Laravelの認証機構は、auth middlewareが基本。
 OAuth認証やBASIC認証とも組み合わせることができる。
 複数の認証方式(Multi-Auth)にも対応。
 ひな形やTraitなど参考になるソースも多く、カスタマイズ
がやりやすい。
Let’s use Laravel!

Más contenido relacionado

La actualidad más candente

AWS Black Belt Online Seminar - Amazon Lightsail
AWS Black Belt Online Seminar - Amazon Lightsail AWS Black Belt Online Seminar - Amazon Lightsail
AWS Black Belt Online Seminar - Amazon Lightsail Amazon Web Services Japan
 
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)NTT DATA Technology & Innovation
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021Hiroshi Tokumaru
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティスAmazon Web Services Japan
 
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield AdvancedAmazon Web Services Japan
 
VPC Reachability Analyzer 使って人生が変わった話
VPC Reachability Analyzer 使って人生が変わった話VPC Reachability Analyzer 使って人生が変わった話
VPC Reachability Analyzer 使って人生が変わった話Noritaka Sekiyama
 
AWS Black Belt Techシリーズ Elastic Load Balancing (ELB)
AWS Black Belt Techシリーズ  Elastic Load Balancing (ELB)AWS Black Belt Techシリーズ  Elastic Load Balancing (ELB)
AWS Black Belt Techシリーズ Elastic Load Balancing (ELB)Amazon Web Services Japan
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjugYahoo!デベロッパーネットワーク
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本kazuki kumagai
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Amazon Web Services Japan
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意Yoshitaka Kawashima
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Taku Miyakawa
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてShigeru Tatsuta
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介AdvancedTechNight
 
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 ResolverAmazon Web Services Japan
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 

La actualidad más candente (20)

AWS Black Belt Online Seminar - Amazon Lightsail
AWS Black Belt Online Seminar - Amazon Lightsail AWS Black Belt Online Seminar - Amazon Lightsail
AWS Black Belt Online Seminar - Amazon Lightsail
 
Keycloak入門
Keycloak入門Keycloak入門
Keycloak入門
 
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
IAM Roles Anywhereのない世界とある世界(2022年のAWSアップデートを振り返ろう ~Season 4~ 発表資料)
 
SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021SPAセキュリティ入門~PHP Conference Japan 2021
SPAセキュリティ入門~PHP Conference Japan 2021
 
NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話NGINXをBFF (Backend for Frontend)として利用した話
NGINXをBFF (Backend for Frontend)として利用した話
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced20200818 AWS Black Belt Online Seminar AWS Shield Advanced
20200818 AWS Black Belt Online Seminar AWS Shield Advanced
 
VPC Reachability Analyzer 使って人生が変わった話
VPC Reachability Analyzer 使って人生が変わった話VPC Reachability Analyzer 使って人生が変わった話
VPC Reachability Analyzer 使って人生が変わった話
 
AWS Black Belt Techシリーズ Elastic Load Balancing (ELB)
AWS Black Belt Techシリーズ  Elastic Load Balancing (ELB)AWS Black Belt Techシリーズ  Elastic Load Balancing (ELB)
AWS Black Belt Techシリーズ Elastic Load Balancing (ELB)
 
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug実運用して分かったRabbit MQの良いところ・気をつけること #jjug
実運用して分かったRabbit MQの良いところ・気をつけること #jjug
 
KeycloakでAPI認可に入門する
KeycloakでAPI認可に入門するKeycloakでAPI認可に入門する
KeycloakでAPI認可に入門する
 
ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本ぱぱっと理解するSpring Cloudの基本
ぱぱっと理解するSpring Cloudの基本
 
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
Kinesis + Elasticsearchでつくるさいきょうのログ分析基盤
 
イミュータブルデータモデルの極意
イミュータブルデータモデルの極意イミュータブルデータモデルの極意
イミュータブルデータモデルの極意
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
Java EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行についてJava EE から Quarkus による開発への移行について
Java EE から Quarkus による開発への移行について
 
単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介単なるキャッシュじゃないよ!?infinispanの紹介
単なるキャッシュじゃないよ!?infinispanの紹介
 
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
20191016 AWS Black Belt Online Seminar Amazon Route 53 Resolver
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 

Destacado

Laravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインLaravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインMasashi Shinbara
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravelMasaru Matsuo
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
LaravelとテストについてTakeo Noda
 
Ad(microsoftの方)のOpenId Connect対応
Ad(microsoftの方)のOpenId Connect対応Ad(microsoftの方)のOpenId Connect対応
Ad(microsoftの方)のOpenId Connect対応Naohiro Fujie
 
ハイブリッド時代のID基盤構成の基礎
ハイブリッド時代のID基盤構成の基礎ハイブリッド時代のID基盤構成の基礎
ハイブリッド時代のID基盤構成の基礎Naohiro Fujie
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るinfinite_loop
 
Office365のIdentity管理
Office365のIdentity管理Office365のIdentity管理
Office365のIdentity管理Naohiro Fujie
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014Nov Matake
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜Masaru Kurahayashi
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーションMasashi Shinbara
 

Destacado (10)

Laravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログインLaravel ユーザなら知っておくべきAuthオートログイン
Laravel ユーザなら知っておくべきAuthオートログイン
 
今日から始めるLaravel
今日から始めるLaravel今日から始めるLaravel
今日から始めるLaravel
 
Laravelとテストについて
LaravelとテストについてLaravelとテストについて
Laravelとテストについて
 
Ad(microsoftの方)のOpenId Connect対応
Ad(microsoftの方)のOpenId Connect対応Ad(microsoftの方)のOpenId Connect対応
Ad(microsoftの方)のOpenId Connect対応
 
ハイブリッド時代のID基盤構成の基礎
ハイブリッド時代のID基盤構成の基礎ハイブリッド時代のID基盤構成の基礎
ハイブリッド時代のID基盤構成の基礎
 
Laravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作るLaravel 5.1 LTSでサービスを作る
Laravel 5.1 LTSでサービスを作る
 
Office365のIdentity管理
Office365のIdentity管理Office365のIdentity管理
Office365のIdentity管理
 
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014SAML / OpenID Connect / OAuth / SCIM 技術解説  - ID&IT 2014 #idit2014
SAML / OpenID Connect / OAuth / SCIM 技術解説 - ID&IT 2014 #idit2014
 
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
OpenID Connect 入門 〜コンシューマーにおけるID連携のトレンド〜
 
認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション認証機能で学ぶ Laravel 5 アプリケーション
認証機能で学ぶ Laravel 5 アプリケーション
 

Similar a Laravelの認証について

FuelPHPでSentry導入
FuelPHPでSentry導入FuelPHPでSentry導入
FuelPHPでSentry導入fagai
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hacki7a
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理junichi anno
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!Shinpei Ohtani
 
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)さくらインターネット株式会社
 
俺の俺による俺のための App Service Environment
俺の俺による俺のための App Service Environment俺の俺による俺のための App Service Environment
俺の俺による俺のための App Service EnvironmentSunao Tomita
 
勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発Kazuki Nakajima
 
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎schoowebcampus
 
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonightAmazon Web Services Japan
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrinoTakeshi Yabe
 
PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~schoowebcampus
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )hiro345
 
Azure Policyでハイブリッドな構成管理
Azure Policyでハイブリッドな構成管理Azure Policyでハイブリッドな構成管理
Azure Policyでハイブリッドな構成管理Masahiko Ebisuda
 
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1Hideki Saito
 
Word press on conoha このべん #3
Word press on conoha このべん #3Word press on conoha このべん #3
Word press on conoha このべん #3Wataru OKAMOTO
 

Similar a Laravelの認証について (20)

FuelPHPでSentry導入
FuelPHPでSentry導入FuelPHPでSentry導入
FuelPHPでSentry導入
 
Using Dancer
Using DancerUsing Dancer
Using Dancer
 
Rails and twitter #twtr_hack
Rails and twitter #twtr_hackRails and twitter #twtr_hack
Rails and twitter #twtr_hack
 
PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理PowerShellを使用したWindows Serverの管理
PowerShellを使用したWindows Serverの管理
 
Struts2を始めよう!
Struts2を始めよう!Struts2を始めよう!
Struts2を始めよう!
 
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
「さくらのクラウド」スタートアップスクリプトを作ってみよう! - concrete5を題材に -(オープンソースカンファレンス2014 Shimane)
 
APIMeetup 20170329_ichimura
APIMeetup 20170329_ichimuraAPIMeetup 20170329_ichimura
APIMeetup 20170329_ichimura
 
俺の俺による俺のための App Service Environment
俺の俺による俺のための App Service Environment俺の俺による俺のための App Service Environment
俺の俺による俺のための App Service Environment
 
Ruby開発者のためのHeroku入門
Ruby開発者のためのHeroku入門Ruby開発者のためのHeroku入門
Ruby開発者のためのHeroku入門
 
勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発勉強会force#2 HTML5によるモバイルアプリ開発
勉強会force#2 HTML5によるモバイルアプリ開発
 
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
増井雄一郎の「wri.pe」を事例に学ぶ、自作サービスの作り方〜開発編 先生:増井 雄一郎
 
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
[CTO Night & Day 2019] AWS Amplify で Web/Mobile 爆速スケーラブル Serverless 開発 #ctonight
 
初めてのPadrino
初めてのPadrino初めてのPadrino
初めてのPadrino
 
PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~PHP実践 ~外部APIを使って情報を取得する~
PHP実践 ~外部APIを使って情報を取得する~
 
15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )15分でCakePHPを始める方法(Nseg 2013-11-09 )
15分でCakePHPを始める方法(Nseg 2013-11-09 )
 
Azure Policyでハイブリッドな構成管理
Azure Policyでハイブリッドな構成管理Azure Policyでハイブリッドな構成管理
Azure Policyでハイブリッドな構成管理
 
AWS Black Belt Online Seminar AWS Amplify
AWS Black Belt Online Seminar AWS AmplifyAWS Black Belt Online Seminar AWS Amplify
AWS Black Belt Online Seminar AWS Amplify
 
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
沖縄オープンラボラトリ OpenStackハンズオンセミナー午後1
 
Word press on conoha このべん #3
Word press on conoha このべん #3Word press on conoha このべん #3
Word press on conoha このべん #3
 
Keycloak開発入門
Keycloak開発入門Keycloak開発入門
Keycloak開発入門
 

Más de Takeo Noda

スタートアップにやさしいAWS
スタートアップにやさしいAWSスタートアップにやさしいAWS
スタートアップにやさしいAWSTakeo Noda
 
Prometeusについてはじめてみよう / Let's start Prometeus
Prometeusについてはじめてみよう / Let's start PrometeusPrometeusについてはじめてみよう / Let's start Prometeus
Prometeusについてはじめてみよう / Let's start PrometeusTakeo Noda
 
ディレクションのすゝめ
ディレクションのすゝめディレクションのすゝめ
ディレクションのすゝめTakeo Noda
 
負荷テスト入門
負荷テスト入門負荷テスト入門
負荷テスト入門Takeo Noda
 
データ解析入門
データ解析入門データ解析入門
データ解析入門Takeo Noda
 
Zabbixで学ぶ統計解析入門
Zabbixで学ぶ統計解析入門Zabbixで学ぶ統計解析入門
Zabbixで学ぶ統計解析入門Takeo Noda
 
映像・音響機材入門
映像・音響機材入門映像・音響機材入門
映像・音響機材入門Takeo Noda
 
サイト運用者に向けたバージョン管理について
サイト運用者に向けたバージョン管理についてサイト運用者に向けたバージョン管理について
サイト運用者に向けたバージョン管理についてTakeo Noda
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみたTakeo Noda
 

Más de Takeo Noda (11)

スタートアップにやさしいAWS
スタートアップにやさしいAWSスタートアップにやさしいAWS
スタートアップにやさしいAWS
 
Vue入門
Vue入門Vue入門
Vue入門
 
Prometeusについてはじめてみよう / Let's start Prometeus
Prometeusについてはじめてみよう / Let's start PrometeusPrometeusについてはじめてみよう / Let's start Prometeus
Prometeusについてはじめてみよう / Let's start Prometeus
 
ディレクションのすゝめ
ディレクションのすゝめディレクションのすゝめ
ディレクションのすゝめ
 
負荷テスト入門
負荷テスト入門負荷テスト入門
負荷テスト入門
 
データ解析入門
データ解析入門データ解析入門
データ解析入門
 
Zabbixで学ぶ統計解析入門
Zabbixで学ぶ統計解析入門Zabbixで学ぶ統計解析入門
Zabbixで学ぶ統計解析入門
 
Zabbix入門
Zabbix入門Zabbix入門
Zabbix入門
 
映像・音響機材入門
映像・音響機材入門映像・音響機材入門
映像・音響機材入門
 
サイト運用者に向けたバージョン管理について
サイト運用者に向けたバージョン管理についてサイト運用者に向けたバージョン管理について
サイト運用者に向けたバージョン管理について
 
Laravel5を使って開発してみた
Laravel5を使って開発してみたLaravel5を使って開発してみた
Laravel5を使って開発してみた
 

Laravelの認証について

  • 1. Copyright © Xchange Solutions All right reserved. Fukuoka.php Vol.19 Laravelの認証について 株式会社エクスチェンジ ソリューションズ 野田 健夫 2016.10.20
  • 2. 2 Copyright © Xchange Solutions All right reserved. こんにちは! 株式会社エクスチェンジ ソリューションズ 野田 健夫(のだたけお) https://twitter.com/nodatakeo https://www.facebook.com/nodatakeo
  • 3. 3 Copyright © Xchange Solutions All right reserved. 認証ページ 認証ページを作る目的。  ユーザー識別  アクセス制限、権限制御  ユーザーごとのサービスカスタマイズ Webサービスの実装において定番機能。 毎度、実装していると思います。
  • 4. 4 Copyright © Xchange Solutions All right reserved. Laravelにおける認証の仕組み  認証は、middlewareを使って実現。  middlewareは、StackPHPというライブラリをベース にしている。 http://stackphp.com/より引用 Symfonyの HttpKernelInterfaceを使う前提はあるが、フレームワーク に依存しない汎用性の高いミドルウェアを作ることができる。 Appがコアとなる処理 Session/Authがミドルウェア部分
  • 5. 5 Copyright © Xchange Solutions All right reserved. 認証を処理するmiddlewareの仕組み Pipeline Design Pattern による実装 send() then() through() TASK1 TASK2 TASK3 …. (new Pipeline($this->app)) ->send($request) ->through($this->middleware) ->then($this->dispatchToRouter()); ※Illuminate¥Foundation¥Http¥Kernelより一部省略して引用。 ※Pipelineをarray_reduceを使って関数型の書き方で実装。 ← 各タスクに流すリクエスト情報 ← middlewareの配列 ← 最終的にControllerのメソッドへ Pipelineに処理を見立てる
  • 6. 6 Copyright © Xchange Solutions All right reserved. Laravelで認証ページを作る方法 1. ひな形(scaffold)を使う 2. 自分で実装する 3. その他 1. BASIC認証 2. OAuth認証(クライアント)
  • 7. 7 Copyright © Xchange Solutions All right reserved. ひな形(scaffold)を使ってみよう laravel new (プロジェクト名) cd (プロジェクト名) chmod 777 -R storage/ ※.env ファイルのDB設定、メールサーバー設定を調整 php artisan make:auth php artisan migrate プロジェクトを作成 認証のひな形を作成
  • 8. 8 Copyright © Xchange Solutions All right reserved. ひな形のルーティング情報 +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ | | GET|HEAD | / | | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | | | GET|HEAD | home | | App¥Http¥Controllers¥HomeController@index | web,auth | | | GET|HEAD | login | login | App¥Http¥Controllers¥Auth¥LoginController@showLoginForm | web,guest | | | POST | login | | App¥Http¥Controllers¥Auth¥LoginController@login | web,guest | | | POST | logout | | App¥Http¥Controllers¥Auth¥LoginController@logout | web | | | POST | password/email | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@sendResetLinkEmail | web,guest | | | GET|HEAD | password/reset | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@showLinkRequestForm | web,guest | | | POST | password/reset | | App¥Http¥Controllers¥Auth¥ResetPasswordController@reset | web,guest | | | GET|HEAD | password/reset/{token} | | App¥Http¥Controllers¥Auth¥ResetPasswordController@showResetForm | web,guest | | | GET|HEAD | register | | App¥Http¥Controllers¥Auth¥RegisterController@showRegistrationForm | web,guest | | | POST | register | | App¥Http¥Controllers¥Auth¥RegisterController@register | web,guest | +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ ルーティング情報をチェック php artisan route:list ※赤枠が追加された認証のひな形部分
  • 9. 9 Copyright © Xchange Solutions All right reserved. 認証ページの種類 登録ページ(/register) ログインページ(/login) パスワードリセットページ(/password/reset) ホーム(/home) ログアウト(/logout) ログイン認証前に 使うページ ログイン認証後に 使うページ
  • 10. 10 Copyright © Xchange Solutions All right reserved. ひな形のルーティング情報:認証前 +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ | | GET|HEAD | / | | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | | | GET|HEAD | home | | App¥Http¥Controllers¥HomeController@index | web,auth | | | GET|HEAD | login | login | App¥Http¥Controllers¥Auth¥LoginController@showLoginForm | web,guest | | | POST | login | | App¥Http¥Controllers¥Auth¥LoginController@login | web,guest | | | POST | logout | | App¥Http¥Controllers¥Auth¥LoginController@logout | web | | | POST | password/email | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@sendResetLinkEmail | web,guest | | | GET|HEAD | password/reset | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@showLinkRequestForm | web,guest | | | POST | password/reset | | App¥Http¥Controllers¥Auth¥ResetPasswordController@reset | web,guest | | | GET|HEAD | password/reset/{token} | | App¥Http¥Controllers¥Auth¥ResetPasswordController@showResetForm | web,guest | | | GET|HEAD | register | | App¥Http¥Controllers¥Auth¥RegisterController@showRegistrationForm | web,guest | | | POST | register | | App¥Http¥Controllers¥Auth¥RegisterController@register | web,guest | +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ HTTPメソッド名 URI情報 Action情報 (Controller層) Middleware情報 (Filter層) 認証前に使うページに指定されているmiddleware web, guest
  • 11. 11 Copyright © Xchange Solutions All right reserved. 認証の仕組み(認証前) Controller層 Filter層 リクエスト レスポンス 認証情報があれば、/home にリダイレクトするmiddleware セッション情報を取り扱う middlewareグループ ※middlewareは、App¥Http¥Kernelにて定義 web guest
  • 12. 12 Copyright © Xchange Solutions All right reserved. ひな形のルーティング情報:認証後 +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ | | GET|HEAD | / | | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | | | GET|HEAD | home | | App¥Http¥Controllers¥HomeController@index | web,auth | | | GET|HEAD | login | login | App¥Http¥Controllers¥Auth¥LoginController@showLoginForm | web,guest | | | POST | login | | App¥Http¥Controllers¥Auth¥LoginController@login | web,guest | | | POST | logout | | App¥Http¥Controllers¥Auth¥LoginController@logout | web | | | POST | password/email | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@sendResetLinkEmail | web,guest | | | GET|HEAD | password/reset | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@showLinkRequestForm | web,guest | | | POST | password/reset | | App¥Http¥Controllers¥Auth¥ResetPasswordController@reset | web,guest | | | GET|HEAD | password/reset/{token} | | App¥Http¥Controllers¥Auth¥ResetPasswordController@showResetForm | web,guest | | | GET|HEAD | register | | App¥Http¥Controllers¥Auth¥RegisterController@showRegistrationForm | web,guest | | | POST | register | | App¥Http¥Controllers¥Auth¥RegisterController@register | web,guest | +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ HTTPメソッド名 URI情報 Action情報 (Controller層) Middleware情報 (Filter層) 認証後に使うページに指定されているmiddleware web, auth
  • 13. 13 Copyright © Xchange Solutions All right reserved. 認証の仕組み(認証後) Controller層 Filter層 リクエスト レスポンス 認証情報がなければ、 AuthenticationExceptionを 投げるmiddleware その後、App¥Exceptions¥Handler.php でルーティング名 ‘login’へリダイレクト セッション情報を取り扱う middlewareグループ ※middlewareは、App¥Http¥Kernelにて定義 web auth
  • 14. 14 Copyright © Xchange Solutions All right reserved. 補足:ルーティング名とは? +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ | Domain | Method | URI | Name | Action | Middleware | +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ | | GET|HEAD | / | | Closure | web | | | GET|HEAD | api/user | | Closure | api,auth:api | | | GET|HEAD | home | | App¥Http¥Controllers¥HomeController@index | web,auth | | | GET|HEAD | login | login | App¥Http¥Controllers¥Auth¥LoginController@showLoginForm | web,guest | | | POST | login | | App¥Http¥Controllers¥Auth¥LoginController@login | web,guest | | | POST | logout | | App¥Http¥Controllers¥Auth¥LoginController@logout | web | | | POST | password/email | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@sendResetLinkEmail | web,guest | | | GET|HEAD | password/reset | | App¥Http¥Controllers¥Auth¥ForgotPasswordController@showLinkRequestForm | web,guest | | | POST | password/reset | | App¥Http¥Controllers¥Auth¥ResetPasswordController@reset | web,guest | | | GET|HEAD | password/reset/{token} | | App¥Http¥Controllers¥Auth¥ResetPasswordController@showResetForm | web,guest | | | GET|HEAD | register | | App¥Http¥Controllers¥Auth¥RegisterController@showRegistrationForm | web,guest | | | POST | register | | App¥Http¥Controllers¥Auth¥RegisterController@register | web,guest | +--------+----------+------------------------+-------+------------------------------------------------------------------------+--------------+ ルーティング情報をチェック php artisan route:list ルーティング名。 ヘルパー関数 route() を使ってURLを呼び 出せるようになります。 例:route(‘login’)
  • 15. 15 Copyright © Xchange Solutions All right reserved. 補足: Routing Annotationの場合の指定例 /** * トップページ * @Get(“/", as="top.get") * @Post(“/", as="top.post") * @Get("/index.html", as="top.index.get") * @Post("/index.html", as="top.index.post") * @Middleware({"web", "auth:web"}) * @param Request $request * @return Response * @throws IllegalParameterException */ ルーティング名
  • 16. 16 Copyright © Xchange Solutions All right reserved. 独自実装する場合① config/auth.phpにGuardとProviderの設定を追加。 /* |----------------------------------------- | Authentication Guards |----------------------------------------- */ // 認証ガード 'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'api' => [ 'driver' => 'token', 'provider' => 'users', ], //追加 for admin 'admin' => [ 'driver' => 'session', // セッション認証 'provider' => 'admins', // 対応するプロバイダー ], ], /* |----------------------------------------- | User Providers |----------------------------------------- */ // 認証プロバイダー 'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App¥User::class, ], 'admins' => [ 'driver' => 'eloquent', 'model' => App¥Admin::class, ], ], ※driverはeloquent/databaseをサポート ※driverはsession/tokenをサポート Guard(認証種別) Provider(Guardに対応する認証モデル情報)
  • 17. 17 Copyright © Xchange Solutions All right reserved. 独自実装する場合② 認証インターフェイス Authenticatable Illuminate¥Contracts¥Auth¥Authenticatable I 認証する対象モデルに対してAuthenticatableのインターフェイスを 適用&Authenticatableを実装したトレイトを組み込み Illuminate¥Auth¥Authenticatable as AuthenticableTrait 認証トレイトAuthenticatableTraitT ※モデルの対象となるキー名を設定する。 認証対象としたいモデル
  • 18. 18 Copyright © Xchange Solutions All right reserved. 独自実装する場合③ Guardに対応するログイン・ログアウトをControllerに実装。 /** * ログイン処理 * @Post("admin_tools/login" , as="admin.login.post") * @return View */ public function postLogin() { // 認証 $credential = [ 'login_id' => Input::get('login_id'), 'password' => Input::get('login_pw'), 'status' => 1, ]; if (Auth::guard('admin')->attempt($credential)) { // ログイン成功 return redirect(route(‘admin.top’)); } // ログイン失敗 $errors->add(‘login_id’, ‘ログインIDまたはパスワードに誤りがあります。’); return view("admin.login", compact('errors')); } /** * ログイン表示 * @Get("admin/login" , as="admin.login.get") * @return View */ public function login() { if (Auth::guard('admin')->check()) { // ログイン済みならメニューへ return redirect(route("admin.top")); } $errors = new MessageBag(); return view("admin.login", compact('errors')); } /** * ログアウト処理+表示 * @Get(“admin_tools/logout” , as=“admin.logout”) * @return View */ public function logout() { if (!Auth::guard('admin')->check()) { Log::debug('Not logined.'); return redirect(route("admin.login.get")); } Auth::guard('admin')->logout(); return view("admin.logout"); } ※guardの種別を指定しない場合、デフォルトのguardが使用される。 ログイン表示 ログイン処理+リダイレクト ログアウト表示
  • 19. 19 Copyright © Xchange Solutions All right reserved. 独自実装する場合④ auth middleware を拡張 /** * Handle an incoming request. * * @param ¥Illuminate¥Http¥Request $request * @param ¥Closure $next * @param string $guard * @return mixed * * @throws ¥Illuminate¥Auth¥AuthenticationException */ public function handle($request, Closure $next, $guard) { if ($this->auth->guard($guard)->check()) { return $next($request); } // $guard の種類によってログイン表示先を変更 return redirect(route($guard.".login")); } 参考:Illuminate¥Auth¥Middleware¥Authenticate Guardの種類に応じてログ インページをリダイレクト するような場合の実装例
  • 20. 20 Copyright © Xchange Solutions All right reserved. 独自実装する場合⑤ 認証をかけたいルーティング情報にmiddlewareを設定 * @Middleware({"web", "auth:admin"}) * @Middleware({"web", "auth:web"}) 設定で指定したGuardの種 類をmiddlewareの引数に指 定する。 ※上記は Routing Annotationで指定した例
  • 21. 21 Copyright © Xchange Solutions All right reserved. 認証の基本は、auth middleware Controller層 Filter層 リクエスト レスポンス 認証情報がなければ、対応するGuard に基づくログインページへリダイレク トするmiddleware。 セッション情報を取り扱う middlewareグループ ※middlewareは、App¥Http¥Kernelにて定義 web auth:(Guard種別)
  • 22. 22 Copyright © Xchange Solutions All right reserved. その他:BASIC認証のmiddleware Controller層 Filter層 リクエスト レスポンス BASIC認証を行うMiddleware ※middlewareは、App¥Http¥Kernelにて定義 auth.basic 対象となるURIのmiddlewareに指定。
  • 23. 23 Copyright © Xchange Solutions All right reserved. その他:OAuth client+Auth middleware composer require laravel/socialite インストール方法 config/app.phpに以下を追加 設定方法 'providers' => [ : // Other service providers... Laravel¥Socialite¥SocialiteServiceProvider::class, ], 'aliases' => [ : // Additional aliases 'Socialite' => Laravel¥Socialite¥Facades¥Socialite::class, ],
  • 24. 24 Copyright © Xchange Solutions All right reserved. その他:OAuth client+Auth middleware config/services.phpに以下を追加。.envにも対応する値を設定。 設定方法 'facebook' => [ 'client_id' => env('FACEBOOK_ID'), 'client_secret' => env('FACEBOOK_SECRET'), 'redirect' => env('FACEBOOK_CALLBACK_URL'), ],
  • 25. 25 Copyright © Xchange Solutions All right reserved. その他:OAuth client+Auth middleware OAuthクライアント OAuthサーバー redirect ログインページ client_id redirect_uri scope state ログインOKならば コールバック callback code (認可コード) state ① ② ③④ callback の中でユーザー情報を取得 し、会員登録・ログイン処理を行う。 redirectでOAuthサーバーへリダイ レクト
  • 26. 26 Copyright © Xchange Solutions All right reserved. その他:OAuth client+Auth middleware /** * OAuthサーバーへのリダイレクト * @Get(“facebook/redirect”, as=“facebook.redirect”) * @return response */ public function redirectToProvider() { return Socialite::driver('facebook')->redirect(); } /** * OAuthサーバーからのコールバック * @Get(“facebook/callback”, as=“facebook.callback”) * @return response */ public function handleProviderCallback(SocialAccountService $service) { // Oauthサーバーからユーザー情報の取得 $socialUser = Socialite::driver('facebook')->user(); // ユーザー情報の登録 $user = User::firstOrCreate([ ‘nickname’ => $socialUser->nickname, ‘email’ => $socialUser->email, ‘token’ => $socialUser->token, ‘refresh_token’ => $socialUser->refreshToken, ‘expires_in’ => $socialUser->expiresIn, ]); // ログイン状態とする Auth::guard(‘web’)->login($user); // リダイレクト return redirect()->to('/home'); } OAuthServerへのリダイレクト(Pg22①) OAuthServerからのコールバック(Pg22④) Controllerの実装例 Socialite::driver(Oauthサーバー種別)->user(); 以下が実行される。 (1) 認可コードよりアクセストークン取得 (2) アクセストークンを使ってユーザー情報 取得
  • 27. 27 Copyright © Xchange Solutions All right reserved. よくあるハマりどころ  “web“middlewareグループの指定漏れ →Sessionを使って認証情報を保持しているため、認証状態を チェックする必要のあるURIにおいては、必ず指定する必要が あります。  remember_tokenがないというエラーがでる。 →remember_tokenを無効化する対応を別途追加する必要があ ります。 ※http://laravel.io/forum/05-21-2014-how-to-disable-remember-token
  • 28. 28 Copyright © Xchange Solutions All right reserved. まとめ  Laravelの認証機構は、auth middlewareが基本。  OAuth認証やBASIC認証とも組み合わせることができる。  複数の認証方式(Multi-Auth)にも対応。  ひな形やTraitなど参考になるソースも多く、カスタマイズ がやりやすい。 Let’s use Laravel!