亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

Laravel5.1 實現(xiàn)第三方登錄認證(包括微博、QQ、微信、豆瓣)

nifhlheimr / 2123人閱讀

摘要:目前支持的認證有。英文不好的同學比如我,下面是中文文檔通過擴展的,實現(xiàn)了很多第三方認證。國內(nèi)的有微博微信豆瓣。至于和的具體值,這個是由新浪微博分發(fā)給你的,在新浪微博的授權(quán)回調(diào)頁中填寫。

前言

第三方登錄認證能簡化用戶登錄/注冊的操作,降低用戶登錄/注冊的門檻,對提高應用的用戶轉(zhuǎn)化率很有幫助。

Socialite

Laravel 為我們提供了簡單、易用的方式,使用 Laravel Socialite 進行 OAuth(OAuth1 和 OAuth2 都有支持) 認證。

Socialite 目前支持的認證有 Facebook、Twitter、Google、LinkedIn、GitHub、Bitbucket。(恩,有一半是“不存在”的網(wǎng)站。)
Socialite 的用法官方文檔中已經(jīng)講得很詳細了,恕不贅述。
英文好的同學,建議直接看 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 的 Driver,實現(xiàn)了很多第三方認證。國內(nèi)的有:微博、QQ、微信、豆瓣。當然你自己也可以參照實現(xiàn)其他的,只要那個網(wǎng)站支持 OAuth。
SocialiteProviders 的使用也超級簡單易用,每個都對應了文檔。其實,不懂英文也能看懂。
文檔地址:http://socialiteproviders.github.io/
其實,文章到這里就應該結(jié)束了。由于文檔是基于 Laravel5.0 的,所以我還是打算基于 Laravel5.1 演示一遍,并說一下要注意的地方吧。

以 Weibo 為例 1.安裝
composer require socialiteproviders/weibo
2.添加 Service Provider

如果之前添加過 Socialite Provider,得先注釋掉:
文件 config/app.php

"providers" => [
//    LaravelSocialiteSocialiteServiceProvider::class,
    SocialiteProvidersManagerServiceProvider::class, // add
],
3.添加 Facades Aliase

如果之前安裝 Socialite 時添加過,就不需要再添加了。
還是文件 config/app.php

"aliases" => [
    "Socialite" => LaravelSocialiteFacadesSocialite::class, // add
],
4.添加事件處理器

文件 app/Providers/EventServiceProvider.php

protected $listen = [
    "SocialiteProvidersManagerSocialiteWasCalled" => [
        "SocialiteProvidersWeiboWeiboExtendSocialite@handle",
    ],
];

這里順便提一下 SocialiteProviders 的原理。

SocialiteProvidersManagerServiceProvider 實際上是繼承于 LaravelSocialiteSocialiteServiceProvider 的,這是它的源碼:

fire($socialiteWasCalled);
    }
}

它只是在啟動時會觸發(fā) SocialiteWasCalled 事件,剛才在 SocialiteProvidersManagerSocialiteWasCalled 事件的監(jiān)聽器中加上了事件處理器:SocialiteProvidersWeiboWeiboExtendSocialite@handle。處理器的源碼:

extendSocialite("weibo", __NAMESPACE__."Provider");
    }
}

處理器做的事情就是為 Socialite 添加了一個 weibo Driver,這樣就可以使用 weibo 的 Driver 了。

5.添加路由

文件 app/Http/routes.php

// 引導用戶到新浪微博的登錄授權(quán)頁面
Route::get("auth/weibo", "AuthAuthController@weibo");
// 用戶授權(quán)后新浪微博回調(diào)的頁面
Route::get("auth/callback", "AuthAuthController@callback");
6.配置

文件 config/services.php

"weibo" => [
    "client_id" => env("WEIBO_KEY"),
    "client_secret" => env("WEIBO_SECRET"),
    "redirect" => env("WEIBO_REDIRECT_URI"),  
],

文件 .env

WEIBO_KEY=yourkeyfortheservice
WEIBO_SECRET=yoursecretfortheservice
WEIBO_REDIRECT_URI=http://192.168.1.7/laravel/public/auth/callback

注意:192.168.1.7 是我本地虛擬機的地址,虛擬機可以連外網(wǎng)就可以測試了。貌似 QQ 的必須綁定域名才是測試。

當然,直接將配置的具體參數(shù)寫在 config/services.php 中也是可以的,但是不推薦這樣。因為 config/services.php 屬于代碼文件,而 .env 屬于配置文件。當代碼上線是只要應用線上環(huán)境的配置文件即可,而不需要改動代碼文件,這算是一個最佳實踐吧。
至于 WEIBO_KEYWEIBO_SECRET 的具體值,這個是由新浪微博分發(fā)給你的,在新浪微博的授權(quán)回調(diào)頁中填寫 WEIBO_REDIRECT_URI。這些細節(jié)已經(jīng)超出本文的內(nèi)容,建議直接到 http://open.weibo.com 查閱新浪微博的手冊。

7.代碼實現(xiàn)

文件 app/Http/Controllers/Auth/AuthController.php

    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());
    }

訪問 http://192.168.1.7/laravel/public/auth/weibo,會跳轉(zhuǎn)到新浪微博的登錄授權(quán)頁面,授權(quán)成功后,會跳轉(zhuǎn)到 http://192.168.1.7/laravel/public/auth/callback
返回的結(jié)果:

string(10) "3221174302"
string(11) "Mr_Jing1992"
NULL
NULL
string(50) "http://tp3.sinaimg.cn/3221174302/180/40064692810/1"

user 對象是現(xiàn)實了接口 LaravelSocialiteContractsUser 的,有以下幾個方法:


當然,并不是有了這些方法就一定能獲取到你需要的數(shù)據(jù)的。比如,在新浪的接口中,想要獲取用戶的 email 是得用戶授權(quán)的,得到授權(quán)后請求獲取郵箱的接口,才能拿到用戶的郵箱。
詳情參見:
http://open.weibo.com/wiki/Scope
http://open.weibo.com/wiki/2/account/profile/email

但是,id 這個應該是所有第三方認證服務提供商都會返回的。不然那就沒有辦法作賬號關(guān)聯(lián)了。

獲取到第三方的 id 后,如果這個 id 和你網(wǎng)站用戶賬號有綁定,就直接登錄你網(wǎng)站用戶的賬號。如果沒有任何賬號與之綁定,就應該提示用戶綁定已有賬號或者是注冊新賬號什么的,這些具體邏輯就不在多說了。還有,在新浪上面還有一個取消授權(quán)回調(diào)頁的值需要填,是用戶在授權(quán)頁點擊“取消”按鈕時新浪回調(diào)的頁面。這個可以設(shè)置為你網(wǎng)站的登錄頁面或者其他頁面。

補充:
http://socialiteproviders.github.io/providers/qq/ 文檔中有一處錯誤。
SocialiteProvidersQQQqExtendSocialite@handle 應該改為:SocialiteProvidersQqQqExtendSocialite@handle。注意大小寫

最后:
如有錯誤,還望指正。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://www.ezyhdfw.cn/yun/21074.html

相關(guān)文章

  • Django使用Social-Auth實現(xiàn)微信三方網(wǎng)站掃碼登錄

    摘要:前言之前讓網(wǎng)頁公司制作新官網(wǎng)的時候規(guī)劃有第三方賬號的登錄功能,但由于當時的一些開放平臺申請步驟比較繁瑣尤其是微信開放平臺,所以一直拖延著,到了最近只能自己添加相關(guān)的功能。 前言 之前讓網(wǎng)頁公司制作新官網(wǎng)的時候規(guī)劃有第三方賬號的登錄功能,但由于當時的一些開放平臺申請步驟比較繁瑣(尤其是微信開放平臺),所以一直拖延著,到了最近只能自己添加相關(guān)的功能。 由于是剛接觸Python和Django...

    fox_soyoung 評論0 收藏0
  • 23個Python爬蟲開源項目代碼,包含微信、淘寶、豆瓣、知乎、微博

    摘要:今天為大家整理了個爬蟲項目。地址新浪微博爬蟲主要爬取新浪微博用戶的個人信息微博信息粉絲和關(guān)注。代碼獲取新浪微博進行登錄,可通過多賬號登錄來防止新浪的反扒。涵蓋鏈家爬蟲一文的全部代碼,包括鏈家模擬登錄代碼。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天為大家整...

    jlanglang 評論0 收藏0
  • Django中使用三方登錄

    摘要:使用微博進行第三方登錄進入微博開放平臺申請應用。根據(jù)微博的接口寫的微博登錄的一個第一步生成一個網(wǎng)頁地址,訪問后是微博第三方登錄的頁面,登錄會返回一個授權(quán)碼必填申請應用時分配的。 OAuth2.0是什么 ?OAuth的英文全稱是Open Authorization,它是一種開放授權(quán)協(xié)議。OAuth目前共有2個版本,2007年12月的1.0版(之后有一個修正版1.0a)和2010年4月的2...

    shadowbook 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<