2015年3月13日金曜日

Opauthでソーシャルログインを実装する

サイトで会員登録するのは自分でも抵抗があるので、ソーシャルログインを実装してみた。

Opauthは、PHPにおける認証処理を標準化してくれるフレームワークだ。

https://github.com/opauth/opauth

上記サイトから、ZIPをダウンロードして展開したら、

1) libをサイトのドキュメントルートにコピーする。
2) 認証用として例えばauthというディレクトリをドキュメントルートに作成する。
3) authの中には、展開したexampleフォルダの中の、index.php、callback.php、.htaccessおよびopauth.conf.php.defaultをコピーする。
4) opauth.conf.php.defaultをopauth.conf.phpにリネームする。
5) opauth.conf.phpの'path' => '/'を'path' => '/auth/'に書き換える。
6) opauth.conf.phpの'security_salt'にランダムな文字列を設定する。
7) opauth.conf.phpのStrategyを、例に従って記述する。

Strategyに記載するパラメーターは、各プロバイダのサイトでアプリケーション登録をすると得られる。

プロバイダのアプリケーション登録ページの例
Facebook
Twitter
Google+

プロバイダ毎のStrategyは以下からダウンロードして、lib/Opauth/Strategyの下にプロバイダ名のディレクトリを作成してコピーする。

https://github.com/opauth/opauth/wiki/List-of-strategies

例えば、Facebookであれば、

lib/Opauth/Strategy/Facebookの下に、FacebookStrategy.phpをコピーする。

Twitterの場合は、Vendor/tmhOAuthディレクトリもコピーする。

認証手続きを開始するには、opauth.conf.phpで設定した'path/(プロバイダ名)'にアクセスする。

私の場合は、Strategyが見つからないというエラーが出たので、opauth.conf.phpのStrategyに以下のパラメータを追加した。

例えば、Facebookであれば、
'Facebook' => array(
            'app_id' => '(app_id)',
            'app_secret' => '(app_secret)',
            'strategy_url_name' => 'Facebook'
)

Googleの場合は、Googleサイト側でError: redirect_uri_mismatchという画面が出てしまい、認証画面が表示されなかったので、以下のパラメータも追加してみた。

'Google' => array(
            'client_id' => '(client_id)',
            'client_secret' => '(client_secret)',
            'redirect_uri' => 'http://(ドメイン)/auth/Google/oauth2callback',
            'strategy_url_name' => 'Google'
)

なお、Googleは、https://console.developers.google.com/project でリダイレクトURLを設定する必要がある。

しかし、結局Googleで認証ができない。

試行錯誤しているうちに、なぜか認証できるようになった。

Googleは、GoogleApps for Workでも感じたが、設定しても反映するまでの遅延が大きいようなので、設定したらある程度時間を置く必要があるのかもしれない。24時間以上かかる場合もある?

サーバー間の同期に時間がかかっているのだろうか。設定方法に自信がない場合は、設定が終了するまでになんともいえない無為な時間が流れるのは、かなり困る。

アプリの設定に表示されないのも、そのせいかと思っていたら、アカウント権限という別ページで管理するようだorz

0 件のコメント:

コメントを投稿