摘要:在詳解中使用解決了第三方賬號(hào)登錄集成的問(wèn)題,那么在獲取到用戶(hù)資料之后呢集成多個(gè)社交賬號(hào),該如何綁定同一個(gè)賬號(hào)本篇就讓我們來(lái)探討一下集成登錄的那點(diǎn)事。
Dearmadman 在 Laravel Socialite 詳解 中使用 larastarscn/socialite 解決了第三方賬號(hào)登錄集成的問(wèn)題,那么在獲取到用戶(hù)資料之后呢?集成多個(gè)社交賬號(hào),該如何綁定同一個(gè)賬號(hào)?本篇就讓我們來(lái)探討一下集成登錄的那點(diǎn)事。
起初起初,當(dāng)我們只需要集成單個(gè)社交登錄時(shí),我們可能會(huì)為了快速的完成任務(wù)簡(jiǎn)單粗暴的在用戶(hù)模型中加入 open_id 或者 github_id 類(lèi)似的屬性,那么在數(shù)據(jù)庫(kù)中,我們需要在表中添加相應(yīng)的字段。這是可以快速有效的完成任務(wù)的做法。
但是,當(dāng)更多的需求來(lái)臨時(shí),要求我們額外的集成一種或者多種社交登錄,那該怎么辦?難道我們還要任性的在表結(jié)構(gòu)中添加相應(yīng)的字段?
Schema::table("users", function ($table) { $table->string("github_id"); $table->string("douban_id"); });
這很明顯的違背了開(kāi)放封閉原則,假如我們這么做,那么可以想象的當(dāng)每多集成一種登錄時(shí),我們就需要對(duì)數(shù)據(jù)表結(jié)構(gòu)做出一次修正,并且,在登錄授權(quán)回調(diào)驗(yàn)證時(shí),還要增加一道集成驅(qū)動(dòng)與字段查詢(xún)匹配的工序。
那應(yīng)該怎么做?
設(shè)想這么想來(lái),User 表是否承擔(dān)了過(guò)多的能力,它是否應(yīng)該浪費(fèi)自己的精力來(lái)管理這些社交標(biāo)識(shí)?那不如我們安排 SocialiteUser 來(lái)專(zhuān)門(mén)管理用戶(hù)與社交賬號(hào)之間的關(guān)系?我們需要設(shè)計(jì)一種易擴(kuò)展的方案來(lái)管理不同驅(qū)動(dòng)的社交登錄,那么我們很容易的設(shè)計(jì)出這種表結(jié)構(gòu):
- socialite_users - id - user_id - driver - open_id
SocialiteUser 應(yīng)該具有哪些職責(zé)?很顯然,它主要用來(lái)維護(hù)社交登錄標(biāo)識(shí)和用戶(hù)模型之間的關(guān)系。那么它應(yīng)該具有以下能力:
將社交登錄賬戶(hù)綁定到用戶(hù)模型上
獲取匹配的用戶(hù)模型
以下為簡(jiǎn)單的代碼演示:
where([ "driver" => $driver, "open_id" => $openid ])->first(); return $finder ? $finder->user : $finder; } /** * get related user model. * * @return /App/User||null */ public function user() { return $this->belongsTo("AppUser"); } /** * Save a new record. * * @param $userId integer * @param $driver string * @param $id string * @return /App/SocialiteUser */ public function saveOne($userId, $driver, $id) { return $this->create([ "user_id" => $userId, "driver" => $driver, "open_id" => $id ]); } }使用
在授權(quán)登錄流程中,用戶(hù)同意授權(quán),第三方應(yīng)用將重定向到回調(diào)路由,回調(diào)路由中 Socialite 會(huì)主動(dòng)請(qǐng)求獲取用戶(hù)資料,并將用戶(hù)的社交標(biāo)識(shí) ID 映射到 User 模型的 id 屬性上。
那么我們就可以在回調(diào)路由中根據(jù)驅(qū)動(dòng)標(biāo)識(shí)和用戶(hù)相應(yīng)的社交標(biāo)識(shí) ID 來(lái)匹配查詢(xún)庫(kù)中是否已存在綁定的用戶(hù)。如果存在那就直接使用匹配到的用戶(hù)登錄,如果不存在,那么就生成一個(gè)用戶(hù),并為這個(gè)用戶(hù)附加社交賬戶(hù)信息。然后使用新生成的賬戶(hù)登錄。
redirect(); } public function handleProviderCallback($driver) { $user = Socialite::driver($driver)->user(); $model = new User(); $socialiteUser = new SocialiteUser(); $finder = $socialiteUser->getUser($driver, $user->id); if (! $finder) { $finder = $model->generateUserInstance(); $finder->save(); $socialiteUser->saveOne($finder->id, $driver, $user->id); } Auth::login($finder); return view("home"); } }
這樣看來(lái),如果需求一種新的社交登錄的集成,那么完全不需要做出其它代碼的改動(dòng),直接配置驅(qū)動(dòng)就可以了。
PS: 歡迎關(guān)注簡(jiǎn)書(shū) Laravel 專(zhuān)題,也歡迎 Laravel 相關(guān)文章的投稿 :),作者知識(shí)技能水平有限,如果你有更好的設(shè)計(jì)方案歡迎討論交流,如果有錯(cuò)誤的地方也請(qǐng)批評(píng)指正,在此表示感謝謝謝 :)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/30484.html
摘要:本篇文章,主要講述了用戶(hù)登錄注冊(cè)的邏輯及如何用社交賬號(hào)登錄。僅供參考,具體情況依據(jù)產(chǎn)品需求而定。社交賬號(hào)登錄參數(shù)參數(shù)平臺(tái)渠道社交平臺(tái)開(kāi)放驗(yàn)證數(shù)據(jù)的合法性。若存在,直接進(jìn)行登錄。若本站不存在賬號(hào),引導(dǎo)用戶(hù)注冊(cè),成功后與當(dāng)前關(guān)聯(lián)即可。 本篇文章,主要講述了用戶(hù)登錄注冊(cè)的邏輯及如何用社交賬號(hào)登錄。 僅供參考,具體情況依據(jù)產(chǎn)品需求而定。 開(kāi)放平臺(tái)有哪些? 微信 Sina微博 QQ 163 3...
摘要:驗(yàn)證碼安全參考信息重放登錄注冊(cè)找密等入口,可能通過(guò)短信驗(yàn)證碼郵箱驗(yàn)證碼之類(lèi)的進(jìn)行確認(rèn)操作,如果末對(duì)操作進(jìn)行次數(shù)及頻率上的限制,則會(huì)產(chǎn)生大量的重放攻擊。高并發(fā)缺陷交易類(lèi)重放攻擊,高并發(fā)的情況下末對(duì)用戶(hù)操作行為加鎖,導(dǎo)致購(gòu)買(mǎi)限制的繞過(guò)。 showImg(https://segmentfault.com/img/bVBVVR); 業(yè)務(wù)安全從流程設(shè)計(jì)維度可劃分為賬戶(hù)體系安全、交易體系安全、支付...
摘要:阮一峰老師曾經(jīng)在他的博文理解里對(duì)這個(gè)概念有了深入淺出的闡述。注這是阮一峰老師文章里提到的中的認(rèn)證模式之一簡(jiǎn)化模式客戶(hù)聽(tīng)起來(lái)不錯(cuò)這樣我就不需要把我們公司的用戶(hù)的密碼提供給您了。這下您放心了吧注這種方式即阮一峰文章里介紹的授權(quán)碼模式。 阮一峰老師曾經(jīng)在他的博文理解OAuth 2.0里對(duì)這個(gè)概念有了深入淺出的闡述。 http://www.ruanyifeng.com/blo... 本文會(huì)結(jié)合...
摘要:阮一峰老師曾經(jīng)在他的博文理解里對(duì)這個(gè)概念有了深入淺出的闡述。注這是阮一峰老師文章里提到的中的認(rèn)證模式之一簡(jiǎn)化模式客戶(hù)聽(tīng)起來(lái)不錯(cuò)這樣我就不需要把我們公司的用戶(hù)的密碼提供給您了。這下您放心了吧注這種方式即阮一峰文章里介紹的授權(quán)碼模式。 阮一峰老師曾經(jīng)在他的博文理解OAuth 2.0里對(duì)這個(gè)概念有了深入淺出的闡述。 http://www.ruanyifeng.com/blo... 本文會(huì)結(jié)合...
閱讀 1599·2023-04-26 00:20
閱讀 1211·2023-04-25 21:49
閱讀 868·2021-09-22 15:52
閱讀 645·2021-09-07 10:16
閱讀 1029·2021-08-18 10:22
閱讀 2721·2019-08-30 14:07
閱讀 2293·2019-08-30 14:00
閱讀 2722·2019-08-30 13:00