修改用户登录后token生成payload中增加角色id和角色名称,对表联查进行函数封装对用户登录认证函数进行修改

This commit is contained in:
wanglei 2025-11-07 17:06:39 +08:00
parent fc93726079
commit f7d8be056a
7 changed files with 89 additions and 46 deletions

View File

@ -3,10 +3,7 @@
--- Created by frankly. --- Created by frankly.
--- DateTime: 2025/10/29 23:36 --- DateTime: 2025/10/29 23:36
--- ---
--引用使用的库文件 local userDao = require("dao.user")
local model = require("share.model")
--创建一个数据表相关的模型
local userModel = model:new('sys_user')
local _M = {} local _M = {}
@ -20,24 +17,7 @@ local function authenticate(name, passwd)
if passwd == "" then if passwd == "" then
return 0x010002, nil return 0x010002, nil
end end
local pwdMd5 = ngx.md5(passwd) return userDao:adjustUser(name, passwd)
--根据用户进行验证用户是否存在
local code, res = userModel:where("username", "=", name):where("password", "=", pwdMd5):get()
if code == 0 and res ~= nil then
return code, res
end
--根据手机号进行验证用户是否存在
code, res = userModel:where("phone", "=", name):where("password", "=", pwdMd5):get()
if code == 0 and res ~= nil then
return code, res
end
--根据邮箱进行验证用户是否存在
code, res = userModel:where("email", "=", name):where("password", "=", pwdMd5):get()
if code == 0 and res ~= nil then
return code, res
end
--查询不到用户信息
return 0x010003, nil
end end
--用户登录业务逻辑处理 --用户登录业务逻辑处理
@ -60,6 +40,14 @@ function _M.login(jsonData)
if num <= 0 then if num <= 0 then
return 0x01000C,nil return 0x01000C,nil
end end
local userid = res[1].id
--获取用户id查询角色信息
local err, rest = userDao:userRole(userid)
if rest == nil then
return 0x01000C,nil
end
res[1].role_id = rest[1].role_id
res[1].role_name = rest[1].role_name
return 0, res return 0, res
end end
@ -72,11 +60,11 @@ end
--用户注册业务逻辑处理 --用户注册业务逻辑处理
function _M.signup(jsonData) function _M.signup(jsonData)
return userModel:addSystemUser(jsonData) return userDao:addSystemUser(jsonData)
end end
function _M.getUser(userid) function _M.getUser(userid)
return userModel:find(userid) return userDao:getSystemUser(userid)
end end
return _M return _M

View File

@ -10,6 +10,8 @@ local model = require("share.model")
--创建一个数据表相关的模型 --创建一个数据表相关的模型
local userModel = model:new('sys_user') local userModel = model:new('sys_user')
local roles = require("dao.role")
local _M = {} local _M = {}
local user = { local user = {
@ -101,4 +103,38 @@ function _M:updateSystemUser(id, jsonData)
return userModel:where('id', '=', id):update(jsonData) return userModel:where('id', '=', id):update(jsonData)
end end
--通过用户名和密码验证用户是否存在
function _M:adjustUser(name, passwd)
if name == nil or passwd == nil then
return 0x010003, nil
end
local pwdMd5 = ngx.md5(passwd)
--根据用户进行验证用户是否存在
local code, res = userModel:where("username", "=", name):where("password", "=", pwdMd5):get()
if code == 0 and res ~= nil then
return code, res
end
--根据手机号进行验证用户是否存在
code, res = userModel:where("phone", "=", name):where("password", "=", pwdMd5):get()
if code == 0 and res ~= nil then
return code, res
end
--根据邮箱进行验证用户是否存在
code, res = userModel:where("email", "=", name):where("password", "=", pwdMd5):get()
if code == 0 and res ~= nil then
return code, res
end
--查询不到用户信息
return 0x010003, nil
end
--通过用户id获取角色的角色id和角色名称
function _M:userRole(id)
local sql = [[SELECT "a"."id","a".username,b."id" AS role_id,b.role_name FROM
sys_user AS "a" INNER JOIN sys_user_role AS "c" ON "a"."id" = "c".user_id
INNER JOIN sys_role AS b ON "c".role_id = b."id" WHERE
"a"."id" = ']]..id.."'"
return userModel:exec(sql)
end
return _M return _M

View File

@ -2,7 +2,7 @@
--- Generated by EmmyLua(https://github.com/EmmyLua) --- Generated by EmmyLua(https://github.com/EmmyLua)
--- Created by admin. --- Created by admin.
--- DateTime: 2025/10/28 11:09 --- DateTime: 2025/10/28 11:09
--- --- 用于
local resp = require("util.response") local resp = require("util.response")
local authDao = require("dao.auth") local authDao = require("dao.auth")
local validator = require("validator.auth.auth") local validator = require("validator.auth.auth")
@ -36,15 +36,12 @@ function _M.login()
resp:send(result) resp:send(result)
return return
end end
local id = "" local id = ret[1].id
local username = "" local username = ret[1].username
for _, row in ipairs(ret) do local role_id = ret[1].role_id
id = row.id local role_name = ret[1].role_name
username = row.username
end
--获取的登陆的用户信息返回tocken --获取的登陆的用户信息返回tocken
local jwt_token = token.generateToken(id, username) local jwt_token = token.generateToken(id, username, role_id, role_name)
local data = {} local data = {}
data["token"] = jwt_token data["token"] = jwt_token
data["userInfo"] = ret data["userInfo"] = ret
@ -95,8 +92,9 @@ function _M.logout()
--验证成功记录登出的日志信息 --验证成功记录登出的日志信息
local userid = ret["body"]["payload"]["userid"] local userid = ret["body"]["payload"]["userid"]
local username = ret["body"]["payload"]["username"] local username = ret["body"]["payload"]["username"]
local rolename = ret["body"]["payload"]["username"] local role_id = ret["body"]["payload"]["role_id"]
ngx.log(ngx.INFO, "userid:"..userid.." username:"..username.." rolename:"..rolename.." logout system") local role_name = ret["body"]["payload"]["role_name"]
ngx.log(ngx.INFO, "userid:"..userid.." username:"..username.." role_id:"..role_id.." role_name:"..role_name.." logout system")
local result = resp:json(0, "用户退出系统成功") local result = resp:json(0, "用户退出系统成功")
resp:send(result) resp:send(result)
end end
@ -143,6 +141,9 @@ function _M.permission()
end end
--验证成功获取用户id信息 --验证成功获取用户id信息
local userid = retToken["body"]["payload"]["userid"] local userid = retToken["body"]["payload"]["userid"]
local username = retToken["body"]["payload"]["username"]
local role_id = retToken["body"]["payload"]["role_id"]
local role_name = retToken["body"]["payload"]["role_name"]
--通过用户id查询到用户的权限信息 --通过用户id查询到用户的权限信息
local code, ret = authDao.getUser(userid) local code, ret = authDao.getUser(userid)
--读取数据错误 --读取数据错误

View File

@ -64,6 +64,7 @@ function _M:retrieve_relations(ids)
return {} return {}
end end
local ids_str = implode(unique(ids)) local ids_str = implode(unique(ids))
print(ids_str)
self.relation_sql = 'select * from \"'..self.relation.model.table..'\" where ' .. self.relation.foreign_key .. ' in (' .. ids_str .. ')' self.relation_sql = 'select * from \"'..self.relation.model.table..'\" where ' .. self.relation.foreign_key .. ' in (' .. ids_str .. ')'
return table_remove(self:query(self.relation_sql, READ), self.relation.model:get_hidden()) return table_remove(self:query(self.relation_sql, READ), self.relation.model:get_hidden())
end end
@ -395,6 +396,10 @@ function _M:debug()
ngx.log(ngx.INFO, self.table.." ") ngx.log(ngx.INFO, self.table.." ")
end end
function _M:exec(sql)
return self:query(sql, READ)
end
--初始化数据表中的字段 --初始化数据表中的字段
function _M:new(table, attributes, hidden) function _M:new(table, attributes, hidden)
local obj = { local obj = {

View File

@ -102,6 +102,10 @@ ngx.say(addlib.add(5,7))
--end --end
--[[ --[[
-- 方法1直接使用EXISTS命令
local value = redis.call("EXISTS", "admin-system:user:add")
ngx.say("key value exist:"..value)
local val1, err = redis:get("admin-system:user:add") local val1, err = redis:get("admin-system:user:add")
local val2, err = redis:get("admin-system:user:edit") local val2, err = redis:get("admin-system:user:edit")
local val3, err = redis:get("admin-system:user:delete") local val3, err = redis:get("admin-system:user:delete")
@ -329,12 +333,18 @@ else
end end
--]] --]]
--引用使用的库文件
local Model = require("share.model")
--创建一个数据表相关的模型
local userModel = Model:new('sys_user')
local user_and_role = userModel:where('id', '=', "1"):with('sys_role'):get() local userModel = require("dao.user")
local code, res = userModel:userRole("1")
--显示查询到的数据记录
if res ~= nil then
print("id value: -- ", res[1].id)
for _, row in ipairs(res) do
for key, value in pairs(row) do
ngx.say(key .. ":" .. tostring(value))
end
end
end
--[[ --[[
--获取数据表中的记录数 --获取数据表中的记录数

View File

@ -23,7 +23,8 @@ local obj = {
payload = { -- 自定义数据 payload = { -- 自定义数据
userid = "", -- 用户id userid = "", -- 用户id
username = "", -- 用户名 username = "", -- 用户名
role = "", -- 角色 role_id = "", -- 角色id
role_name = "", -- 角色名称
--iss = "your_issuer", -- 签发者 --iss = "your_issuer", -- 签发者
--sub = "1234567890", -- 主题 --sub = "1234567890", -- 主题
exp = ngx.time() + 3600, -- 过期时间(例如:当前时间+1小时 exp = ngx.time() + 3600, -- 过期时间(例如:当前时间+1小时
@ -31,13 +32,15 @@ local obj = {
} }
} }
function _M.generateToken(userid, username) function _M.generateToken(userid, username, role_id, role_name)
if userid == nil or username == nil then if userid == nil or username == nil or role_id == nil or role_name == nil then
return "" return ""
end end
obj.payload.userid = userid obj.payload.userid = userid
obj.payload.username = username obj.payload.username = username
obj.payload.role_id = role_id
obj.payload.role_name = role_name
--获取的登陆的用户信息返回tocken --获取的登陆的用户信息返回tocken
local jwt_token = jwt:sign(SYSTEM_CONFIG.secret_key, obj) local jwt_token = jwt:sign(SYSTEM_CONFIG.secret_key, obj)
return "Bearer "..jwt_token return "Bearer "..jwt_token