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