Lua实现网站登录权限验证

在做网站后台时大家可能考虑比较多就是权限如何验证、浏览器在登陆后如何持续验证权限和权限过滤,那些路径能访问、那些不可以。
此贴使用fastweb服务实现登录鉴权功能。
=====登录验证 [login.lua]=======================
获取请求信息,查询数据库并设置会话权限

require("website")
function login()
    local username = param_throw("username")
    local password = param_throw("password")

    -- 验证账号格式
    if string.len(username) < 4 or string.len(username) > 32 then
        reply(201,"账号长度为4~32")
        return
    end
    -- 验证密码格式
    if string.len(password) < 4 or string.len(password) > 32 then
        reply(201,"密码长度为4~32")
        return
    end


    -- 查询MYSQL users表
    -- 此处的mysql变量为 init.lua 中注册的应用全局变量
    local result = mysql:select():table("users"):field({"id"}):where_str("username","=",username):where_str("password","=",password):query()
    if result:row_count() ~= 1 then
        reply(201,"账号或密码错误")
        return
    end
    result:next()
    local id = result:get("id")


    -- 获取session会话对象
	local session = session()
    -- 验证session是否有效
	if session:check() == false then
        -- 初始化session
        -- make_software_guid() 是 fastweb 提供的获取应用唯一ID字符串的函数方法(跨网站唯一请勿使用)
		session:init(request,make_software_guid())
	end

	-- 更新登录状态
    -- 保存ID到该会话中
	session:set("id",tostring(result:get("id")))

    -- 取出session的ID为会话token,浏览器以后需要携带此协议头请求服务器,方便验证权限
	reply(200,"",{token=session:id()})


end
function access()
    -- 获取请求类型(无参抛异常)
    local action = param_throw("action")

    if action == "login" then
        login()
    end
end

=====拦截器 [interceptor.lua]=======================
过滤/scripts的API请求,判断是否登录决定允许或拒绝向下执行

require ("website")

-- 跳转到登录页面
function goto_login_page()
	-- 重定向
	response:redirect("/page/login.html",true)
end

function access()

	-- 判断是否为公共开放接口目录
	if string.sub(request:filepath(),1,16) == "/scripts/public/" then
		--公共开放接口,允许访问无需校验权限
		return true
	end

	-- 获取token 
	if request:token() == "" then
		-- 无TOKEN说明未登录,重定向到登录页
		goto_login_page()
		return false
	end
	-- 校验session
	local session =session()
	if session:check() == false or session:get("id") == "" then
		-- SESSION已过期
		goto_login_page()
		return false
	end

	-- session验证通过,允许继续访问执行
	return true
end

===== 网页代码 [login.html]=======================

 $.ajax({
				url: "/scripts/public/user.lua?action=login",
				type: "POST",
				contentType: "application/json",
				dataType: "json",
				data: JSON.stringify(requestData),
				success: function(response) {
					if(response.code == 200){
						localStorage.setItem('token',response.data.token);
						// 全局设置 AJAX 请求头部
						$.ajaxSetup({
							beforeSend: function(xhr) {
								var token = localStorage.getItem('token');
								if (token) {
									xhr.setRequestHeader('token', token);
								}
							}
						});
						 window.location = '../index.html';
					}else{
						layer.msg(response.msg);
					}
				}
			});

获取示例代码可以查看该贴:Lua是怎么实现网站开发的?-CSDN博客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

_小生有礼了_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值