Laravel5.1はサードパーティのログイン認証を実装しています(Weibo、QQ、WeChat、Doubanを含む)

WBOY
リリース: 2016-06-23 13:28:28
オリジナル
1043 人が閲覧しました

はじめに

サードパーティのログイン認証は、ユーザーのログイン/登録操作を簡素化し、ユーザーのログイン/登録のしきい値を下げることができ、アプリケーションのユーザー コンバージョン率の向上に非常に役立ちます。

Socialite

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

SocialiteProviders は、Socialite のドライバーを拡張することで多くのサードパーティ認証を実装します。国内のものには、Weibo、QQ、WeChat、Douban などがあります。もちろん、Web サイトが OAuth をサポートしている限り、参照によって他のものを実装することもできます。
SocialiteProviders の使用も非常にシンプルで使いやすく、それぞれに対応するドキュメントがあります。実は英語がわからなくても理解できます。
ドキュメントのアドレス: http://socialiteproviders.github.io/
実際には、この記事はここで終わるはずです。 Laravel5.0ベースのドキュメントなので、引き続きLaravel5.1ベースでデモし、注意点などをお話しする予定です。

Weibo を例に挙げます

1.
composer require socialiteproviders/weibo
ログイン後にコピー
をインストールします

2. Socialite プロバイダーを追加したことがある場合は、次のようにコメント化する必要があります:

file config/app.php

'providers' => [//    Laravel\Socialite\SocialiteServiceProvider::class,    SocialiteProviders\Manager\ServiceProvider::class, // add],
ログイン後にコピー

3. ファサード エイリアスを追加します。


Socialite のインストール時に以前に追加したことがある場合は、再度追加する必要はありません。

静止ファイル config/app.php

'aliases' => [    'Socialite' => Laravel\Socialite\Facades\Socialite::class, // add],
ログイン後にコピー

4. イベントハンドラーの追加


ファイル app/Providers/EventServiceProvider.php

protected $listen = [    'SocialiteProviders\Manager\SocialiteWasCalled' => [        'SocialiteProviders\Weibo\WeiboExtendSocialite@handle',    ],];
ログイン後にコピー

ちなみに、SocialiteProvidersの原理はこんな感じです。

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');
ログイン後にコピー

6. 設定

ファイル config/services.php

'weibo' => [    'client_id' => env('WEIBO_KEY'),    'client_secret' => env('WEIBO_SECRET'),    'redirect' => env('WEIBO_REDIRECT_URI'),  ],
ログイン後にコピー

File.env

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());    }
ログイン後にコピー

ユーザー オブジェクトは LaravelSocialiteContractsUser インターフェイスを実装し、次のメソッドを持ちます:

string(10) "3221174302"string(11) "Mr_Jing1992"NULLNULLstring(50) "http://tp3.sinaimg.cn/3221174302/180/40064692810/1"
ログイン後にコピー
もちろん、それはこれらの方法で必要なデータを取得できるかどうかはわかりません。たとえば、Sina のインターフェイスでは、ユーザーの電子メールを取得したい場合は、ユーザーを承認する必要があります。承認を取得した後、インターフェイスに電子メール アドレスの取得を要求して、ユーザーの電子メール アドレスを取得できます。

詳細については、こちらをご覧ください:

http://open.weibo.com/wiki/Scope

http://open.weibo.com/wiki/2/account/profile/email

ただし、IDはすべてのサードパーティ認証サービス プロバイダーがそれを返します。そうしないと、アカウントをリンクすることができなくなります。

サードパーティ ID を取得した後、この ID がウェブサイトのユーザー アカウントにバインドされている場合は、ウェブサイトのユーザー アカウントに直接ログインします。アカウントがバインドされていない場合、ユーザーは既存のアカウントをバインドするか、新しいアカウントを登録するように求められます。これらの特定のロジックについては詳しく説明しません。また、Sina に入力する必要がある 認証コールバック ページ の値があります。これは、ユーザーが認証ページで [キャンセル] ボタンをクリックしたときに Sina がコールバックするページです。これは、ログイン ページまたは Web サイトの他のページとして設定できます。

追加:
http://socialiteproviders.github.io/providers/qq/ ドキュメントに誤りがあります。
SocialiteProvidersQQQqExtendSocialite@handle を SocialiteProvidersQqQqExtendSocialite@handle に変更する必要があります。 大文字小文字に注意してください

最後に:
間違いがあれば、修正してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート