摘要:目前支持的認(rèn)證有。英文不好的同學(xué)比如我,下面是中文文檔通過(guò)擴(kuò)展的,實(shí)現(xiàn)了很多第三方認(rèn)證。國(guó)內(nèi)的有微博微信豆瓣。至于和的具體值,這個(gè)是由新浪微博分發(fā)給你的,在新浪微博的授權(quán)回調(diào)頁(yè)中填寫(xiě)。
前言
第三方登錄認(rèn)證能簡(jiǎn)化用戶登錄/注冊(cè)的操作,降低用戶登錄/注冊(cè)的門(mén)檻,對(duì)提高應(yīng)用的用戶轉(zhuǎn)化率很有幫助。
SocialiteLaravel 為我們提供了簡(jiǎn)單、易用的方式,使用 Laravel Socialite 進(jìn)行 OAuth(OAuth1 和 OAuth2 都有支持) 認(rèn)證。
Socialite 目前支持的認(rèn)證有 Facebook、Twitter、Google、LinkedIn、GitHub、Bitbucket。(恩,有一半是“不存在”的網(wǎng)站。)
Socialite 的用法官方文檔中已經(jīng)講得很詳細(xì)了,恕不贅述。
英文好的同學(xué),建議直接看 Laravel 官方文檔,畢竟看二手知識(shí)是有高風(fēng)險(xiǎn)的。
英文不好的同學(xué)(比如我),下面是中文文檔:
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 通過(guò)擴(kuò)展 Socialite 的 Driver,實(shí)現(xiàn)了很多第三方認(rèn)證。國(guó)內(nèi)的有:微博、QQ、微信、豆瓣。當(dāng)然你自己也可以參照實(shí)現(xiàn)其他的,只要那個(gè)網(wǎng)站支持 OAuth。
SocialiteProviders 的使用也超級(jí)簡(jiǎn)單易用,每個(gè)都對(duì)應(yīng)了文檔。其實(shí),不懂英文也能看懂。
文檔地址:http://socialiteproviders.github.io/
其實(shí),文章到這里就應(yīng)該結(jié)束了。由于文檔是基于 Laravel5.0 的,所以我還是打算基于 Laravel5.1 演示一遍,并說(shuō)一下要注意的地方吧。
composer require socialiteproviders/weibo2.添加 Service Provider
如果之前添加過(guò) Socialite Provider,得先注釋掉:
文件 config/app.php
"providers" => [ // LaravelSocialiteSocialiteServiceProvider::class, SocialiteProvidersManagerServiceProvider::class, // add ],3.添加 Facades Aliase
如果之前安裝 Socialite 時(shí)添加過(guò),就不需要再添加了。
還是文件 config/app.php
"aliases" => [ "Socialite" => LaravelSocialiteFacadesSocialite::class, // add ],4.添加事件處理器
文件 app/Providers/EventServiceProvider.php
protected $listen = [ "SocialiteProvidersManagerSocialiteWasCalled" => [ "SocialiteProvidersWeiboWeiboExtendSocialite@handle", ], ];
這里順便提一下 SocialiteProviders 的原理。
SocialiteProvidersManagerServiceProvider 實(shí)際上是繼承于 LaravelSocialiteSocialiteServiceProvider 的,這是它的源碼:
fire($socialiteWasCalled); } }
它只是在啟動(dòng)時(shí)會(huì)觸發(fā) SocialiteWasCalled 事件,剛才在 SocialiteProvidersManagerSocialiteWasCalled 事件的監(jiān)聽(tīng)器中加上了事件處理器:SocialiteProvidersWeiboWeiboExtendSocialite@handle。處理器的源碼:
extendSocialite("weibo", __NAMESPACE__."Provider"); } }
處理器做的事情就是為 Socialite 添加了一個(gè) weibo Driver,這樣就可以使用 weibo 的 Driver 了。
5.添加路由文件 app/Http/routes.php
// 引導(dǎo)用戶到新浪微博的登錄授權(quán)頁(yè)面 Route::get("auth/weibo", "AuthAuthController@weibo"); // 用戶授權(quán)后新浪微博回調(diào)的頁(yè)面 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 是我本地虛擬機(jī)的地址,虛擬機(jī)可以連外網(wǎng)就可以測(cè)試了。貌似 QQ 的必須綁定域名才是測(cè)試。
當(dāng)然,直接將配置的具體參數(shù)寫(xiě)在 config/services.php 中也是可以的,但是不推薦這樣。因?yàn)?config/services.php 屬于代碼文件,而 .env 屬于配置文件。當(dāng)代碼上線是只要應(yīng)用線上環(huán)境的配置文件即可,而不需要改動(dòng)代碼文件,這算是一個(gè)最佳實(shí)踐吧。
至于 WEIBO_KEY 和 WEIBO_SECRET 的具體值,這個(gè)是由新浪微博分發(fā)給你的,在新浪微博的授權(quán)回調(diào)頁(yè)中填寫(xiě) WEIBO_REDIRECT_URI。這些細(xì)節(jié)已經(jīng)超出本文的內(nèi)容,建議直接到 http://open.weibo.com 查閱新浪微博的手冊(cè)。
文件 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()); }
訪問(wèn) http://192.168.1.7/laravel/public/auth/weibo,會(huì)跳轉(zhuǎn)到新浪微博的登錄授權(quán)頁(yè)面,授權(quán)成功后,會(huì)跳轉(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 對(duì)象是現(xiàn)實(shí)了接口 LaravelSocialiteContractsUser 的,有以下幾個(gè)方法:
當(dāng)然,并不是有了這些方法就一定能獲取到你需要的數(shù)據(jù)的。比如,在新浪的接口中,想要獲取用戶的 email 是得用戶授權(quán)的,得到授權(quán)后請(qǐng)求獲取郵箱的接口,才能拿到用戶的郵箱。
詳情參見(jiàn):
http://open.weibo.com/wiki/Scope
http://open.weibo.com/wiki/2/account/profile/email但是,id 這個(gè)應(yīng)該是所有第三方認(rèn)證服務(wù)提供商都會(huì)返回的。不然那就沒(méi)有辦法作賬號(hào)關(guān)聯(lián)了。
獲取到第三方的 id 后,如果這個(gè) id 和你網(wǎng)站用戶賬號(hào)有綁定,就直接登錄你網(wǎng)站用戶的賬號(hào)。如果沒(méi)有任何賬號(hào)與之綁定,就應(yīng)該提示用戶綁定已有賬號(hào)或者是注冊(cè)新賬號(hào)什么的,這些具體邏輯就不在多說(shuō)了。還有,在新浪上面還有一個(gè)取消授權(quán)回調(diào)頁(yè)的值需要填,是用戶在授權(quán)頁(yè)點(diǎn)擊“取消”按鈕時(shí)新浪回調(diào)的頁(yè)面。這個(gè)可以設(shè)置為你網(wǎng)站的登錄頁(yè)面或者其他頁(yè)面。
補(bǔ)充:
http://socialiteproviders.github.io/providers/qq/ 文檔中有一處錯(cuò)誤。
SocialiteProvidersQQQqExtendSocialite@handle 應(yīng)該改為:SocialiteProvidersQqQqExtendSocialite@handle。注意大小寫(xiě)。最后:
如有錯(cuò)誤,還望指正。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/21074.html
摘要:前言之前讓網(wǎng)頁(yè)公司制作新官網(wǎng)的時(shí)候規(guī)劃有第三方賬號(hào)的登錄功能,但由于當(dāng)時(shí)的一些開(kāi)放平臺(tái)申請(qǐng)步驟比較繁瑣尤其是微信開(kāi)放平臺(tái),所以一直拖延著,到了最近只能自己添加相關(guān)的功能。 前言 之前讓網(wǎng)頁(yè)公司制作新官網(wǎng)的時(shí)候規(guī)劃有第三方賬號(hào)的登錄功能,但由于當(dāng)時(shí)的一些開(kāi)放平臺(tái)申請(qǐng)步驟比較繁瑣(尤其是微信開(kāi)放平臺(tái)),所以一直拖延著,到了最近只能自己添加相關(guān)的功能。 由于是剛接觸Python和Django...
摘要:今天為大家整理了個(gè)爬蟲(chóng)項(xiàng)目。地址新浪微博爬蟲(chóng)主要爬取新浪微博用戶的個(gè)人信息微博信息粉絲和關(guān)注。代碼獲取新浪微博進(jìn)行登錄,可通過(guò)多賬號(hào)登錄來(lái)防止新浪的反扒。涵蓋鏈家爬蟲(chóng)一文的全部代碼,包括鏈家模擬登錄代碼。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天為大家整...
摘要:使用微博進(jìn)行第三方登錄進(jìn)入微博開(kāi)放平臺(tái)申請(qǐng)應(yīng)用。根據(jù)微博的接口寫(xiě)的微博登錄的一個(gè)第一步生成一個(gè)網(wǎng)頁(yè)地址,訪問(wèn)后是微博第三方登錄的頁(yè)面,登錄會(huì)返回一個(gè)授權(quán)碼必填申請(qǐng)應(yīng)用時(shí)分配的。 OAuth2.0是什么 ?OAuth的英文全稱是Open Authorization,它是一種開(kāi)放授權(quán)協(xié)議。OAuth目前共有2個(gè)版本,2007年12月的1.0版(之后有一個(gè)修正版1.0a)和2010年4月的2...
閱讀 3480·2021-11-24 09:38
閱讀 3221·2021-11-22 09:34
閱讀 2130·2021-09-22 16:03
閱讀 2405·2019-08-29 18:37
閱讀 402·2019-08-29 16:15
閱讀 1791·2019-08-26 13:56
閱讀 893·2019-08-26 12:21
閱讀 2227·2019-08-26 12:15