Я получил пользовательскую таблицу со столбцом email, паролем, 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;
Кроме того, я получилформа на основе таблицы, которая позволяет пользователю обновлять свой пароль, как я могу установить ограничение, чтобы убедиться, что вставка пароля не является простым текстом, например, включает в себя заглавные буквы, специальные символы и т. д.
Спасибо.