SpringBoot之網站的登陸注冊邏輯


網站的登錄注冊實現邏輯

該文章主要是為了整理之前學習項目中的知識點,並進行一定程度的理解。

技術列表:

  1. SpringBoot
  2. MySQL
  3. redis
  4. JWT

用戶登錄邏輯:

首先打開前端登錄頁面,F12進行網頁URL抓取:

image-20211012104858289

隨便輸入信息,查看請求后端的地址:

地址:

請求 URL: http://localhost:8888/login
請求方法: POST
狀態代碼: 200 
遠程地址: [::1]:8888
引用站點策略: strict-origin-when-cross-origin

很明顯,前端用戶輸入賬戶,通過post請求傳遞給后端接收:

@RequestMapping("/login")
public class LoginController {
    @Autowired
    private LoginService loginService;
    @PostMapping
    public Result login(@RequestBody LoginParam loginParam){
        return loginService.login(loginParam);
    }

}

這里為了方便傳輸,把前端參數封裝成對象傳入.

后端驗證查詢賬戶的邏輯操作:

  1. 獲取賬戶密碼
  2. 判斷賬戶密碼是否為空
  3. 密碼加密,采用MD5加密+鹽的操作
  4. 通過處理的賬戶密碼(加密)進行數據庫查詢
String pwd = DigestUtils.md5Hex(password + salt);
//根據賬號和加密的密碼進行數據庫的查找
SysUser sysUser = sysUserService.findUser(account, pwd);
  1. 查找成功,使用JWT工具包生成token,保存到redis中

image-20211012105628301

  1. 向前端返回生成的token,檢查token,進行登錄
{
    "code": 200,
    "success": true,
    "msg": "success",
    "data": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzQ4OTY1MDIsInVzZXJJZCI6MSwiaWF0IjoxNjM0MDA3NDcwfQ.9elJSiGa-QARLqKGLTeFW9go7ujsArd0QV_HihHfEm0"
}

這里就實現了JWT和redis實現簡單的登錄驗證功能。

用戶注冊邏輯:

前端請求:

image-20211012112212421

前端傳遞賬戶名、密碼、昵稱,調用http://localhost:8888/register地址進行post傳參,后端接收參數

  1. 獲取前端參數,判斷參數是否合法(是否為空)

  2. 判斷賬戶是否存在,存在,返回賬戶已經被注冊了的json數據

  3. 不存在、注冊賬戶(生成User對象)調用保存接口,保存的時候需要將密碼進行MD5+鹽 加密

  4. 生成token令牌

    String token = JWTUtils.createToken(sysUser.getId());
    
  5. 存入redis 並返回

    這里存入redis是因為,注冊成功后會跳轉到前端頁面,前端頁面會去redis中找user的信息進行對比,如果存在,顯示登錄,反之登錄失敗。

  6. 注意加上事務,一旦中間的任何過程出現問題,注冊的用戶需要回滾(防止臟數據)

將生成得token傳遞給前端:

{
    "code": 200,
    "success": true,
    "msg": "success",
    "data": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzQ4NDc0MzQsInVzZXJJZCI6MTQ0NzU1MjU3MDYzMDQzNDgxNywiaWF0IjoxNjMzOTU4NDAxfQ.zn5meG_lUWROuz7TmkUGS0MTjO1-TDQa42uM_-uhXqs"
}

前端調用該接口,:

http://localhost:8888/users/currentUser

前端將獲得token傳遞給后端接口currentUser,在redis中找到user信息,校驗信息,解析數據,返回用戶基本信息,前端解析

前端index.js部分代碼段:

login({commit}, user) {
      return new Promise((resolve, reject) => {
        login(user.account, user.password).then(data => {
          if(data.success){
            commit('SET_TOKEN', data.data)
            setToken(data.data)
            resolve()
          }else{
            reject(data.msg)
          }
        }).catch(error => {
          reject(error)
        })
      })

到這里就是簡單的登錄注冊的功能,上述內容都是部分代碼段,如果有需要學習的可以評論留言。

參考文獻:

【碼神之路】博客開發;

結束:

如果你看到這里或者正好對你有所幫助,希望能點個👍或者⭐感謝;

有錯誤的地方,歡迎在評論指出,作者看到會進行修改。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM