網站的登錄注冊實現邏輯
該文章主要是為了整理之前學習項目中的知識點,並進行一定程度的理解。
技術列表:
- SpringBoot
- MySQL
- redis
- JWT
用戶登錄邏輯:
首先打開前端登錄頁面,F12進行網頁URL抓取:
隨便輸入信息,查看請求后端的地址:
地址:
請求 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);
}
}
這里為了方便傳輸,把前端參數封裝成對象傳入.
后端驗證查詢賬戶的邏輯操作:
- 獲取賬戶密碼
- 判斷賬戶密碼是否為空
- 密碼加密,采用MD5加密+鹽的操作
- 通過處理的賬戶密碼(加密)進行數據庫查詢
String pwd = DigestUtils.md5Hex(password + salt);
//根據賬號和加密的密碼進行數據庫的查找
SysUser sysUser = sysUserService.findUser(account, pwd);
- 查找成功,使用JWT工具包生成token,保存到redis中
- 向前端返回生成的token,檢查token,進行登錄
{
"code": 200,
"success": true,
"msg": "success",
"data": "eyJhbGciOiJIUzI1NiJ9.eyJleHAiOjE2MzQ4OTY1MDIsInVzZXJJZCI6MSwiaWF0IjoxNjM0MDA3NDcwfQ.9elJSiGa-QARLqKGLTeFW9go7ujsArd0QV_HihHfEm0"
}
這里就實現了JWT和redis實現簡單的登錄驗證功能。
用戶注冊邏輯:
前端請求:
前端傳遞賬戶名、密碼、昵稱,調用http://localhost:8888/register地址進行post傳參,后端接收參數
-
獲取前端參數,判斷參數是否合法(是否為空)
-
判斷賬戶是否存在,存在,返回賬戶已經被注冊了的json數據
-
不存在、注冊賬戶(生成User對象)調用保存接口,保存的時候需要將密碼進行MD5+鹽 加密
-
生成token令牌
String token = JWTUtils.createToken(sysUser.getId());
-
存入redis 並返回
這里存入redis是因為,注冊成功后會跳轉到前端頁面,前端頁面會去redis中找user的信息進行對比,如果存在,顯示登錄,反之登錄失敗。
-
注意加上事務,一旦中間的任何過程出現問題,注冊的用戶需要回滾(防止臟數據)
將生成得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)
})
})
到這里就是簡單的登錄注冊的功能,上述內容都是部分代碼段,如果有需要學習的可以評論留言。
參考文獻:
【碼神之路】博客開發;
結束:
如果你看到這里或者正好對你有所幫助,希望能點個👍或者⭐感謝;
有錯誤的地方,歡迎在評論指出,作者看到會進行修改。