1. 程式人生 > >登入、退出(關於token)

登入、退出(關於token)

關於token

一般APP都是剛安裝後,第一次啟動時需要登入(提示你需要登入或者直接啟動在登入介面)。而只要登入成功後,以後每次啟動時都是登入狀態,不需要每次啟動時再次登入。不過,也有些APP若你長期未啟動,再次啟動時,它會提示你登入過期,讓你重新登入。這個是怎麼實現的?APP是怎麼保持登入狀態的?

比較標準的方案是“帶時效檢測的token機制”。所謂token,即“令牌”的意思。那這個token機制的執行邏輯是怎麼樣的呢?

token機制

這裡寫圖片描述

當用戶剛安裝完APP,並進行了註冊,擁有了賬號和密碼後。此時,則該進行首次登入了(所以在登入時最好加個是否首次登入的引數傳給後臺)

APP將使用者輸入的 賬號和密碼 提交給伺服器;
伺服器對其進行校驗,若賬號和密碼對得上則校驗通過,說明登入成功,並生成一個token值,將其儲存在資料庫,同時也返回給客戶端;
客戶端拿到返回的token值後,可將其儲存在本地,作為公共引數,即以後每次請求伺服器時都攜帶該token,提交給伺服器,讓伺服器校驗
伺服器接收到請求後,會取出請求頭裡的token值與資料庫儲存的token進行對比校驗。若兩個token值相同,則說明使用者登入成功過,且當前正處於登入狀態,此時正常返回資料,讓APP顯示資料。若兩個值不一致,則說明原來的的登入已經失效,此時返回錯誤狀態碼,提示使用者跳轉至登入介面重新登入。使用者每進行一次登入,登入成功後伺服器都會更新個token新值返回給客戶端。

注意:首先看在登入介面傳送登入請求那塊。一開始我以為伺服器返回的token值會在響應資料體中,也就是和使用者資訊在一起。但是我看了介面,並沒有發現與token對應的欄位。後來仔細看了下程式碼,原來token是在響應頭中的。上面邏輯裡的無論是儲存token值,還是攜帶token作為公共引數,都是在網路層完成的。這一切都發生在網路層,而不麻煩業務層,這很優雅。每當登入成功後,伺服器在響應頭中返回新的token值,將其儲存在本地。