サードパーティのログイン認証は、ユーザーのログイン/登録操作を簡素化し、ユーザーのログイン/登録のしきい値を下げることができ、アプリケーションのユーザー コンバージョン率の向上に非常に役立ちます。
Laravel は、OAuth (OAuth1 と OAuth2 の両方がサポートされています) 認証に Laravel Socialite を使用するためのシンプルで使いやすい方法を提供します。
Socialite は現在、Facebook、Twitter、Google、LinkedIn、GitHub、および Bitbucket の認証をサポートしています。 (まあ、半分は「存在しない」Webサイトです。)
Socialiteの使い方は公式ドキュメントで詳しく説明されているので、詳しくは説明しません。
英語が得意な学生は、Laravel の公式ドキュメントを直接読むことをお勧めします。結局のところ、受け売りの知識を読むのは危険です。
英語が苦手な学生(私と同じ)、ここに中国語のドキュメントがあります:
Laravel 5.0: http://laravel-china.org/docs/5.0/authentication#social-authentication
Laravel 5.1: http:// laravel.tw /docs/5.1/authentication#social-authentication
SocialiteProviders は、Socialite のドライバーを拡張することで多くのサードパーティ認証を実装します。国内のものには、Weibo、QQ、WeChat、Douban などがあります。もちろん、Web サイトが OAuth をサポートしている限り、参照によって他のものを実装することもできます。
SocialiteProviders の使用も非常にシンプルで使いやすく、それぞれに対応するドキュメントがあります。実は英語がわからなくても理解できます。
ドキュメントのアドレス: http://socialiteproviders.github.io/
実際には、この記事はここで終わるはずです。 Laravel5.0ベースのドキュメントなので、引き続きLaravel5.1ベースでデモし、注意点などをお話しする予定です。
composer require socialiteproviders/weibo
'providers' => [// Laravel\Socialite\SocialiteServiceProvider::class, SocialiteProviders\Manager\ServiceProvider::class, // add],
Socialite のインストール時に以前に追加したことがある場合は、再度追加する必要はありません。
'aliases' => [ 'Socialite' => Laravel\Socialite\Facades\Socialite::class, // add],
ファイル app/Providers/EventServiceProvider.php
protected $listen = [ 'SocialiteProviders\Manager\SocialiteWasCalled' => [ 'SocialiteProviders\Weibo\WeiboExtendSocialite@handle', ],];
SocialiteProvidersManagerServiceProvider は実際には LaravelSocialiteSocialiteServiceProvider から継承されています。これはそのソース コードです:
<?phpnamespace SocialiteProviders\Manager;use Illuminate\Contracts\Events\Dispatcher;use Laravel\Socialite\SocialiteServiceProvider;class ServiceProvider extends SocialiteServiceProvider{ /** * @param Dispatcher $event * @param SocialiteWasCalled $socialiteWasCalled */ public function boot(Dispatcher $event, SocialiteWasCalled $socialiteWasCalled) { $event->fire($socialiteWasCalled); }}
起動時に SocialiteWasCalled イベントをトリガーするだけです: SocialiteProvidersWeiboWeiboExtendSocialite @ハンドル。プロセッサのソース コード:
<?phpnamespace SocialiteProviders\Weibo;use SocialiteProviders\Manager\SocialiteWasCalled;class WeiboExtendSocialite{ public function handle(SocialiteWasCalled $socialiteWasCalled) { $socialiteWasCalled->extendSocialite('weibo', __NAMESPACE__.'\Provider'); }}
プロセッサが行うことは、Weibo ドライバーを Socialite に追加して、Weibo ドライバーを使用できるようにすることです。
5.ルートを追加しますファイル app/Http/routes.php
// 引导用户到新浪微博的登录授权页面Route::get('auth/weibo', 'Auth\AuthController@weibo');// 用户授权后新浪微博回调的页面Route::get('auth/callback', 'Auth\AuthController@callback');
'weibo' => [ 'client_id' => env('WEIBO_KEY'), 'client_secret' => env('WEIBO_SECRET'), 'redirect' => env('WEIBO_REDIRECT_URI'), ],
WEIBO_KEY=yourkeyfortheserviceWEIBO_SECRET=yoursecretfortheserviceWEIBO_REDIRECT_URI=http://192.168.1.7/laravel/public/auth/callback
注: 192.168.1.7 は私のローカル仮想です機械仮想マシンが外部ネットワークに接続できるようになると、アドレスをテストできます。 QQ はテストのためにドメイン名にバインドする必要があるようです。
もちろん、config/services.php に設定の特定のパラメーターを直接記述することも可能ですが、これはお勧めできません。 config/services.php はコード ファイルに属し、.env は構成ファイルに属しているためです。コードがオンラインになると、コード ファイルを変更せずにオンライン環境の構成ファイルを適用するだけで済みます。これがベスト プラクティスと考えられます。
WEIBO_KEYとWEIBO_SECRETの具体的な値については、新浪微博から配布されていますので、新浪微博の認証コールバックページにWEIBO_REDIRECT_URIを記入してください。これらの詳細は、この記事の内容を超えています。http://open.weibo.com に直接アクセスして、Sina Weibo マニュアルを参照することをお勧めします。
7. コードの実装 ファイル app/Http/Controllers/Auth/AuthController.php
http://192.168.1.7/laravel/public/auth/weibo にアクセスすると、Sina Weibo のログイン認証ページにジャンプします。認証が成功すると、http://192.168.1.7/laravel/public/auth/callback にジャンプします返された結果:
public function weibo() { return \Socialite::with('weibo')->redirect(); // return \Socialite::with('weibo')->scopes(array('email'))->redirect(); } public function callback() { $oauthUser = \Socialite::with('weibo')->user(); var_dump($oauthUser->getId()); var_dump($oauthUser->getNickname()); var_dump($oauthUser->getName()); var_dump($oauthUser->getEmail()); var_dump($oauthUser->getAvatar()); }
string(10) "3221174302"string(11) "Mr_Jing1992"NULLNULLstring(50) "http://tp3.sinaimg.cn/3221174302/180/40064692810/1"
詳細については、こちらをご覧ください:
http://open.weibo.com/wiki/Scopehttp://open.weibo.com/wiki/2/account/profile/email
サードパーティ ID を取得した後、この ID がウェブサイトのユーザー アカウントにバインドされている場合は、ウェブサイトのユーザー アカウントに直接ログインします。アカウントがバインドされていない場合、ユーザーは既存のアカウントをバインドするか、新しいアカウントを登録するように求められます。これらの特定のロジックについては詳しく説明しません。また、Sina に入力する必要がある 認証コールバック ページ の値があります。これは、ユーザーが認証ページで [キャンセル] ボタンをクリックしたときに Sina がコールバックするページです。これは、ログイン ページまたは Web サイトの他のページとして設定できます。
追加:
http://socialiteproviders.github.io/providers/qq/ ドキュメントに誤りがあります。
SocialiteProvidersQQQqExtendSocialite@handle を SocialiteProvidersQqQqExtendSocialite@handle に変更する必要があります。 大文字小文字に注意してください。
最後に:
間違いがあれば、修正してください。