首頁  >  文章  >  資料庫  >  redis如何實現掃碼登陸

redis如何實現掃碼登陸

PHPz
PHPz轉載
2023-05-28 14:58:161318瀏覽

需求介紹

首先,介紹下什麼是掃碼登入。現在,大部分的同學手機都裝有qq和淘寶,天貓等這一類軟體。而開發這些app的企業,都有他們相對應的網站。為了讓用戶在使用他們的網站時,登入更加方便和安全。這些企業提供了, 使用手機,掃一掃,就可以登入的服務。網頁登入時的效果如下:

redis如何實現掃碼登陸

#
redis如何實現掃碼登陸#

#
有很多小夥伴可能會感到很神奇,網頁上只是顯示了個二維碼,它怎麼就知道是哪個手機掃到了二維碼,並且進行登入的呢?而且,登入完成以後,還能直接把用戶資訊顯示給用戶,真的很神奇。

原理解釋

網頁端 伺服器

接下來就是對於這個服務的詳細實作。當使用者開啟網站登入頁面時,會向瀏覽器伺服器發送請求以取得登入二維碼,這是其原理。

伺服器收到請求後,隨機產生一個uuid,將這個id作為key值存入redis伺服器,同時設定一個過期時間,再過期後,使用者登入二維碼需要刷新重新取得。同時,將這個key值和本公司的驗證字串合在一起,透過二維碼生成接口,產生一個二維碼的圖片(二維碼生成,網路上有很多現成的介面和源碼,這裡不再介紹。)然後,將二維碼圖片和uuid一起回傳給使用者瀏覽器。

瀏覽器會定時向伺服器發送請求以檢查登入是否成功,這些請求包括二維碼和UUID資訊。請求中攜帶有uuid作為目前頁面的識別碼。有些同學可能會感到疑惑,因為伺服器只在Redis中儲存UUID作為鍵,那麼使用者的ID資訊又是從哪裡來的呢?

這裡確實會有用戶的id訊息,這個id訊息是由手機伺服器存入redis中的。

手機端伺服器

當瀏覽器獲得二維碼後,它將其顯示在網頁上並提示用戶:「請拿出您的手機並打開掃一掃來進行登錄」。使用者拿出手機掃描二維碼,就可以得到一個驗證資訊和一個uuid(掃描二維碼取得字串的功能在網路上同樣有很多demo,這裡就不詳細介紹了)。

由於手機端已經進行過了登錄,在訪問手機端的伺服器的時候,參數中都回攜帶一個用戶的token,手機端伺服器可以從中解析到用戶的userId(這裡從token中取值而不是手機端直接傳userid是為了安全,直接傳userid可能會被截獲和修改,token是加密的,被修改的風險會小很多)。

手機端將解析到的資料和使用者token一起作為參數,向伺服器發送驗證登入請求(這裡的伺服器是手機伺服器,手機端的伺服器跟網頁端伺服器不是同一台伺服器)。在收到請求後,伺服器會先比較參數中的驗證訊息,以確認其是否為使用者登入請求的介面。如果是,回傳一個確認訊息給手機端。

當手機端收到回應時,應該顯示登入確認框以避免使用者誤操作並提高登入體驗。用戶確認是進行的登入操作後,手機再次發送請求。伺服器拿到uuId和userId後,將使用者的userid作為value值存入redis中以uuid作為key的鍵值對中。

登入成功

然後,瀏覽器再次發送請求的時候,瀏覽器端的伺服器就可以得到一個使用者Id,並且呼叫登入的方法,聲成一個瀏覽器端的token,再瀏覽器再次發送請求的時候,將使用者資訊回傳給瀏覽器,登入成功。我們選擇儲存用戶ID而不是直接儲存用戶訊息,因為手機端和瀏覽器端的用戶資訊可能不完全相同。

登入原理圖如下:
redis如何實現掃碼登陸

     




####################################################### #################################

以上是redis如何實現掃碼登陸的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除