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

資訊專(zhuān)欄INFORMATION COLUMN

淺談多個(gè)社交賬號(hào)的綁定設(shè)計(jì)

wean / 1783人閱讀

摘要:在詳解中使用解決了第三方賬號(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

相關(guān)文章

  • 淺談多個(gè)社交賬號(hào)登錄注冊(cè)設(shè)計(jì)

    摘要:本篇文章,主要講述了用戶(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...

    Mr_houzi 評(píng)論0 收藏0
  • 互聯(lián)網(wǎng)業(yè)務(wù)安全之通用安全風(fēng)險(xiǎn)模型

    摘要:驗(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ù)體系安全、交易體系安全、支付...

    liaorio 評(píng)論0 收藏0
  • OAuth 2.0協(xié)議在SAP產(chǎn)品中應(yīng)用

    摘要:阮一峰老師曾經(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é)合...

    qiangdada 評(píng)論0 收藏0
  • OAuth 2.0協(xié)議在SAP產(chǎn)品中應(yīng)用

    摘要:阮一峰老師曾經(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é)合...

    princekin 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<