前言
最近在想著一個(gè)事情,就是新用戶注冊(cè)一個(gè)應(yīng)用的時(shí)候,會(huì)使用手機(jī)驗(yàn)證碼的方式進(jìn)行驗(yàn)證,以確保本次注冊(cè)真實(shí)有效。關(guān)于手機(jī)驗(yàn)證碼用途的說明,請(qǐng)看這篇文章短信驗(yàn)證碼有什么作用?
但是發(fā)手機(jī)驗(yàn)證碼是需要花錢的,有沒有什么方法可以即實(shí)現(xiàn)手機(jī)驗(yàn)證碼的功能,又不需要花錢呢。很早以前,大家使用郵箱進(jìn)行驗(yàn)證,但是郵箱被盜取、濫用的幾率,比手機(jī)高很多。手機(jī)驗(yàn)證碼之所以能代替郵箱,成為主流的驗(yàn)證方式,是因?yàn)槭謾C(jī)被盜取,手機(jī)號(hào)被濫用的幾率相對(duì)郵箱,比較底。既然手機(jī)可以收驗(yàn)證碼,也可以通過其他方式登陸,比如APP里的掃一掃。說到掃一掃,就必須要提到微信了。
微信登陸
我們可以把防止機(jī)器注冊(cè)的問題交給微信處理,讓所有注冊(cè)用戶都必須使用微信登陸。但是使用微信登陸必須要是企業(yè)才能開通。還有微信公眾號(hào)有一個(gè)網(wǎng)頁(yè)授權(quán)功能,也可以滿足驗(yàn)證,但是需要服務(wù)號(hào)才能使用,同樣,申請(qǐng)服務(wù)號(hào)也需要企業(yè)才能申請(qǐng)。這就給個(gè)人小作坊網(wǎng)站斷了后路。
訂閱號(hào)消息處理
但是微信的訂閱號(hào)是個(gè)人就可以申請(qǐng)的。訂閱號(hào)可以接受并處理用戶發(fā)送過來的消息。如下圖所示:

我們可以利用這個(gè)被動(dòng)回復(fù)用戶消息的功能。在用戶注冊(cè)的時(shí)候綁定它的微信號(hào),這樣達(dá)到了驗(yàn)證用戶真實(shí)注冊(cè)的目的。假設(shè)我們已經(jīng)有了一個(gè)微信訂閱號(hào),具體的步驟如下:
- 當(dāng)用戶注冊(cè)時(shí),在后臺(tái)生成一個(gè)6位數(shù)的密碼,記作code。
- 用戶輸入完注冊(cè)信息后,顯示訂閱號(hào)的二維碼,然后提示用戶使用微信掃碼關(guān)注訂閱號(hào)后輸入code。
- 用戶在訂閱號(hào)輸入code后,前端注冊(cè)頁(yè)面提示用戶驗(yàn)證通過(這里注冊(cè)頁(yè)面需要和服務(wù)端保持連接),服務(wù)器記錄本次用戶注冊(cè)時(shí)關(guān)聯(lián)的微信openid。
- 用戶找回密碼等重要重置操作都可以在訂閱號(hào)的輸入框里完成。如果用戶取消對(duì)該訂閱號(hào)的關(guān)注,訂閱號(hào)后臺(tái)處理程序會(huì)收到這個(gè)消息,這時(shí)我們可以凍結(jié)用戶的賬號(hào),提示用戶再次關(guān)注,或者用新的微信號(hào)關(guān)注訂閱號(hào)重新輸入code驗(yàn)證才能繼續(xù)使用網(wǎng)站服務(wù)。
完成了上訴步驟,我們甚至可以實(shí)現(xiàn),用戶不用輸入賬號(hào)密碼就能登陸,只是稍微讓用戶點(diǎn)一點(diǎn),掃一掃就可以。具體步驟如下:
- 因?yàn)橛脩舻奈⑿盘?hào)已經(jīng)關(guān)注了我們的訂閱號(hào),我們訂閱號(hào)的菜單里可以有一個(gè)登陸的選項(xiàng)。當(dāng)用戶點(diǎn)擊登陸的時(shí)候,我們給用戶回復(fù)一個(gè)鏈接,讓用戶在微信里打開這個(gè)鏈接。
- 用戶在微信里打開登陸鏈接后,給用戶種下標(biāo)識(shí)登陸的cookie。
- 用戶到網(wǎng)站登陸頁(yè)面登陸時(shí),提供一個(gè)二維碼,讓用戶使用微信掃。用戶使用微信掃描后,服務(wù)器端就知道用戶可以登陸成功。網(wǎng)站登陸頁(yè)面跳轉(zhuǎn)到登陸狀態(tài)。
- 整個(gè)驗(yàn)證流程是:訂閱號(hào)知道用戶是誰(shuí)-》微信里的瀏覽器標(biāo)識(shí)用戶登陸-》微信瀏覽器打開網(wǎng)站提供的鏈接(二維碼)-》微信里把登陸狀態(tài)轉(zhuǎn)遞給網(wǎng)站(通過服務(wù)器標(biāo)記)-》最好用戶在網(wǎng)站里登陸。
不得不承認(rèn),這個(gè)方案有一些繁瑣。但是相對(duì)于用戶輸入賬號(hào)密碼,或者需要花錢的手機(jī)號(hào)驗(yàn)證碼登陸。還是方便不少的。
總結(jié)
這個(gè)方案從理論上講是可行的。下次我們把代碼也給實(shí)現(xiàn)了。這樣就可以使用了,誰(shuí)叫我們還沒注冊(cè)公司就想上一個(gè)體驗(yàn)比較好的網(wǎng)站呢。