前言
最近在想著一個事情尤莺,就是新用戶注冊一個應(yīng)用的時候九串,會使用手機驗證碼的方式進行驗證踢步,以確保本次注冊真實有效癣亚。關(guān)于手機驗證碼用途的說明,請看這篇文章短信驗證碼有什么作用获印?
但是發(fā)手機驗證碼是需要花錢的述雾,有沒有什么方法可以即實現(xiàn)手機驗證碼的功能,又不需要花錢呢兼丰。很早以前玻孟,大家使用郵箱進行驗證,但是郵箱被盜取鳍征、濫用的幾率黍翎,比手機高很多。手機驗證碼之所以能代替郵箱艳丛,成為主流的驗證方式匣掸,是因為手機被盜取趟紊,手機號被濫用的幾率相對郵箱,比較底碰酝。既然手機可以收驗證碼织阳,也可以通過其他方式登陸,比如APP里的掃一掃砰粹。說到掃一掃,就必須要提到微信了造挽。
微信登陸
我們可以把防止機器注冊的問題交給微信處理碱璃,讓所有注冊用戶都必須使用微信登陸。但是使用微信登陸必須要是企業(yè)才能開通饭入。還有微信公眾號有一個網(wǎng)頁授權(quán)功能嵌器,也可以滿足驗證,但是需要服務(wù)號才能使用谐丢,同樣爽航,申請服務(wù)號也需要企業(yè)才能申請。這就給個人小作坊網(wǎng)站斷了后路乾忱。
訂閱號消息處理
但是微信的訂閱號是個人就可以申請的讥珍。訂閱號可以接受并處理用戶發(fā)送過來的消息。如下圖所示:
我們可以利用這個被動回復(fù)用戶消息的功能窄瘟。在用戶注冊的時候綁定它的微信號衷佃,這樣達到了驗證用戶真實注冊的目的。假設(shè)我們已經(jīng)有了一個微信訂閱號蹄葱,具體的步驟如下:
- 當(dāng)用戶注冊時氏义,在后臺生成一個6位數(shù)的密碼,記作code图云。
- 用戶輸入完注冊信息后惯悠,顯示訂閱號的二維碼,然后提示用戶使用微信掃碼關(guān)注訂閱號后輸入code竣况。
- 用戶在訂閱號輸入code后克婶,前端注冊頁面提示用戶驗證通過(這里注冊頁面需要和服務(wù)端保持連接),服務(wù)器記錄本次用戶注冊時關(guān)聯(lián)的微信openid丹泉。
- 用戶找回密碼等重要重置操作都可以在訂閱號的輸入框里完成鸠补。如果用戶取消對該訂閱號的關(guān)注,訂閱號后臺處理程序會收到這個消息嘀掸,這時我們可以凍結(jié)用戶的賬號紫岩,提示用戶再次關(guān)注,或者用新的微信號關(guān)注訂閱號重新輸入code驗證才能繼續(xù)使用網(wǎng)站服務(wù)睬塌。
完成了上訴步驟泉蝌,我們甚至可以實現(xiàn)歇万,用戶不用輸入賬號密碼就能登陸,只是稍微讓用戶點一點勋陪,掃一掃就可以贪磺。具體步驟如下:
- 因為用戶的微信號已經(jīng)關(guān)注了我們的訂閱號,我們訂閱號的菜單里可以有一個登陸的選項诅愚。當(dāng)用戶點擊登陸的時候扁瓢,我們給用戶回復(fù)一個鏈接,讓用戶在微信里打開這個鏈接禽最。
- 用戶在微信里打開登陸鏈接后集索,給用戶種下標(biāo)識登陸的cookie。
- 用戶到網(wǎng)站登陸頁面登陸時雌桑,提供一個二維碼喇喉,讓用戶使用微信掃。用戶使用微信掃描后校坑,服務(wù)器端就知道用戶可以登陸成功拣技。網(wǎng)站登陸頁面跳轉(zhuǎn)到登陸狀態(tài)。
- 整個驗證流程是:訂閱號知道用戶是誰-》微信里的瀏覽器標(biāo)識用戶登陸-》微信瀏覽器打開網(wǎng)站提供的鏈接(二維碼)-》微信里把登陸狀態(tài)轉(zhuǎn)遞給網(wǎng)站(通過服務(wù)器標(biāo)記)-》最好用戶在網(wǎng)站里登陸耍目。
不得不承認(rèn)膏斤,這個方案有一些繁瑣。但是相對于用戶輸入賬號密碼邪驮,或者需要花錢的手機號驗證碼登陸掸绞。還是方便不少的。
總結(jié)
這個方案從理論上講是可行的耕捞。下次我們把代碼也給實現(xiàn)了衔掸。這樣就可以使用了,誰叫我們還沒注冊公司就想上一個體驗比較好的網(wǎng)站呢俺抽。