【发布时间】:2019-04-15 12:42:27
【问题描述】:
我有一个用户表,其中包含电子邮件、密码、is_locked(varchar2(1) default = 'N')、login_failed(number default = 0) 列。以下是我为自定义身份验证方案编写的代码:
FUNCTION my_user_auth(
p_username in varchar2,
p_password in varchar2)
RETURN boolean
IS
l_result NUMBER := 0;
l_locked VARCHAR2(1) := 'N';
Sts NUMBER := 0;
v_return BOOLEAN := FALSE;
BEGIN
SELECT 1, USER_TYPE_ID, IS_LOCKED INTO l_result, Sts, l_locked
FROM USER_INFO
WHERE LOWER(EMAIL) = LOWER(p_username)
AND LOGIN_PASSWORD = p_password;
if (l_locked ='N' AND l_result = 1) then
APEX_UTIL.SET_SESSION_STATE('GLOBAL_STATUS_ITEM', Sts);
v_return := TRUE;
elsif (l_locked ='Y') then
apex_util.set_custom_auth_status (p_status => 'Account Locked, Exceeded Maximum Attempts! Please contact support staff.');
v_return := false;
end if;
RETURN v_return;
END my_user_auth;
在几次登录尝试失败后,是否有可能使用户的电子邮件被锁定(将“is_locked”值更改为“Y”)?
我曾尝试添加以下代码,但添加代码后,即使密码正确,用户也无法登录系统:
if(l_result = 0) then
if(login_failed > 3) then
UPDATE USER_INFO
SET is_locked = 'Y'
WHERE email = p_username;
elsif
UPDATE USER_INFO
SET login_failed = login_failed + 1
WHERE email = p_username;
endif;
endif;
此外,我得到了一个基于表格的表格,允许用户更新他们的密码,我如何设置约束以确保密码插入不是纯文本,例如包括大写、特殊字符等。
谢谢。
【问题讨论】:
-
自定义身份验证有什么原因吗?您请求的功能可通过 APEX 身份验证开箱即用,您无需担心散列您自己的密码 docs.oracle.com/en/database/oracle/application-express/19.1/…
-
因为我没有完全的访问控制并且有一些限制来为应用程序设置一些策略
标签: oracle oracle-apex