Laravel 5では、Laravel Socialiteを別途インストールすることで、Facebook,Twitter,Google,GitHub等と連携した認証(OAuth,OAuth2)を、簡単に実装できるようになります。
https://github.com/laravel/socialite
細かな書き方などは、以下がとても参考になりました。
https://laracasts.com/series/whats-new-in-laravel-5/episodes/9
以下、Facebookを用いた認証の簡単なサンプルです。
まず、予めFacebook側で適当にアプリを作成して、発行されたキーをプロジェクトルートの .env と config/services.php に設定しておきます。尚、.envはバージョン管理せずに、各環境でこっそりと作成するべきファイルです。
.env
FACEBOOK_CLIENT_ID=xxxxxxxxxx FACEBOOK_CLIENT_SECRET=yyyyyyyyyyconfig/services.php
// 以下を追記 'facebook' => [ 'client_id' => getenv('FACEBOOK_CLIENT_ID'), 'client_secret' => getenv('FACEBOOK_CLIENT_SECRET'), 'redirect' => url('facebook/callback'), ],.envで設定した値はgetenv()で取得できます。CLIからの実行時でも取得できます。この機能は"PHP dotenv"を用いているので、同様のことは他のフレームワーク等でも簡単にできます。
https://github.com/vlucas/phpdotenv
Laravel Socialiteをインストールします。
$ composer require laravel/socialite:~2.0@devconfig/app.phpのprovidersにLaravel Socialiteのプロバイダを追記します。
'Laravel\Socialite\SocialiteServiceProvider',routes.phpに、Facebook認証用のコントローラを追加します。以下、一例。
$router->controllers([ 'facebook' => 'FacebookController', ]);app/Http/Controllers/FacebookController.php を作成します。
<?php namespace App\Http\Controllers; use Laravel\Socialite\Contracts\Factory as Socialite; class FacebookController extends Controller { /** * @var Socialite */ protected $socialite; public function __construct(Socialite $socialite) { $this->socialite = $socialite; } public function getLogin() { return $this->socialite->driver('facebook')->redirect(); } public function getCallback() { $user = $this->socialite->driver('facebook')->user(); dd($user); } }以下の流れで、ユーザ情報が正しく表示されれば成功です。
* facebook/loginにアクセスしてFacebook側にリダイレクトされる。
* Facebook側で認証してfacebook/callbackにリダイレクトされる。
* ユーザ情報が表示される。
また、以下の形で、scopesの指定も出来ました。
return $this->socialite->driver('facebook')->scopes(['user_friends'])->redirect();同じ流れで、Twitterの認証もうまくいきました。その他、GithubProviderやGoogleProviderも用意されているので、これらも同じような方法で上手くいくのかなと思います。
https://github.com/laravel/socialite/tree/master/src/Two
標準では用意されていないサービスでも、これらを参考にして簡単に自前できそうですね。
No comments:
Post a Comment