一、前言
先聲明一下,本文所注重點(diǎn)為實(shí)現(xiàn)思路,代碼及數(shù)據(jù)庫設(shè)計(jì)主要為了展現(xiàn)思路,如果對代碼效率有著苛刻要求的項(xiàng)目切勿照搬。
相信做過微信開發(fā)的人授權(quán)這塊都沒少做過,但是一般來說我們更多的是為移動端的網(wǎng)站做授權(quán),確切來說是在微信端下做的一個授權(quán)。今天遇到的一個問題是,項(xiàng)目支持微信端以及 PC 端,并且開放注冊。要求做到無論在 PC 端注冊或者是在微信端注冊之后都可以在另外一個端進(jìn)行登錄。也就是說無論 PC 或是微信必須做到"你就是你"(通過某種方式關(guān)聯(lián))。
二、尋找解決方案
按傳統(tǒng)的方式來思考,微信端完全可以通過授權(quán)進(jìn)行注冊,但是PC端呢,傳統(tǒng)的方式無非就是填填手機(jī)號碼啊,或者 Email 等等。如果采用這種方式注冊,會產(chǎn)生下面這的問題
1.我先在微信端授權(quán)注冊,那么如果我要登錄PC端還是得進(jìn)行注冊。
對此解決方案可以為:微信授權(quán)注冊后“強(qiáng)制”要求用戶必須填寫基本信息,如手機(jī)號、Email 。這樣我們可以通過某種方式為用戶生成PC端登錄的賬號密碼.例如以用戶的 nickname 為賬號,手機(jī)號碼為密碼,等等方式。
弊端:用戶體驗(yàn)不好,再者有安全隱患。畢竟你的微信昵稱, Email 或者手機(jī)號碼都是暴露的。
2.如果我先在 PC 端注冊,我在微信授權(quán)的時候怎樣關(guān)聯(lián)移動端
當(dāng)然,凡是問題總會有解決方案的。思路如下:
方案一:當(dāng)用戶在 PC 端注冊后,“強(qiáng)制” 用戶必須填寫微信昵稱。以此作為微信授權(quán)時的關(guān)聯(lián)條件。但是很遺憾,微信昵稱可以改,不是唯一的怎么可以用來做關(guān)聯(lián)?方案一陣亡。
方案二:在微信端授權(quán)后,以及在 PC 端注冊后“強(qiáng)制”要求用戶填寫手機(jī)號碼以此為關(guān)聯(lián)。這樣衍生出一個問題,必須確保用戶手機(jī)的真實(shí)信,沒問題。這個可以通過手機(jī)驗(yàn)證碼來實(shí)現(xiàn)(Email也是一樣)。但是不妨假設(shè)一下有下面這種情況,如果我有兩個手機(jī)號碼,PC 端注冊時填一個,微信注冊時填另一個。關(guān)聯(lián)的了嗎?答案是很遺憾。再者,我在PC 端注冊后我就是不填(筆者把強(qiáng)制打上雙引號的原因),然后我用微信端授權(quán)登錄一下。好吧,此時將會有兩條數(shù)據(jù)等著你想辦法去關(guān)聯(lián),典型的開發(fā)者自挖坑。這種方式某種程度上行得通,但是嚴(yán)謹(jǐn)程度上是開發(fā)者無法接受的。
三、回歸原點(diǎn)的解決方案
分析:既然方案上述方案都有問題,我們先把它們都拋到一邊。整理一下思路,讓我們回到問題的根本。關(guān)聯(lián)的問題,要的是一個唯一標(biāo)識。唯一標(biāo)識正如我們的身份證號碼,我們辦理信用卡的時候身份證是必須的,實(shí)名制下購買號碼卡,身份證是必須的。假設(shè)我們是這系統(tǒng)管理員,那么我完全可以通過你的身份證號碼查出你手機(jī)號碼,銀行卡號碼。
新聞熱點(diǎn)
疑難解答
圖片精選