我尝试在 APEX 上实现自定义登录,但应用程序不断拒绝有效数据。 我将用户表定义如下:
CREATE TABLE "USERS"
(
"USER_ID" NUMBER GENERATED BY DEFAULT ON NULL AS IDENTITY MINVALUE 1 MAXVALUE 9999999999999999999999999999 INCREMENT BY 1 START WITH 1 CACHE 20 NOORDER NOCYCLE NOKEEP NOSCALE NOT NULL ENABLE,
"USERNAME" VARCHAR2(100) NOT NULL ENABLE,
"PASSWORD" VARCHAR2(512) NOT NULL ENABLE,
"IS_ADMIN" VARCHAR2(1) NOT NULL ENABLE,
CONSTRAINT "PK_CUSTOM_USERS" PRIMARY KEY ("USER_ID")
USING INDEX ENABLE,
CONSTRAINT "UQ_CUSTOM_USERS_USERNAME" UNIQUE ("USERNAME")
USING INDEX ENABLE
) ;
以及自定义身份验证功能:
create or replace FUNCTION authenticate_user (p_username VARCHAR2, p_password VARCHAR2)
RETURN BOOLEAN
IS
l_count NUMBER;
BEGIN
-- Debug statement to output input parameters
DBMS_OUTPUT.PUT_LINE('Input Username: ' || p_username);
DBMS_OUTPUT.PUT_LINE('Input Password: ' || p_password);
-- Query to check if the username and password match
SELECT COUNT(*)
INTO l_count
FROM USERS
WHERE USERNAME = p_username
AND PASSWORD = p_password;
-- Debug statement to output the count
DBMS_OUTPUT.PUT_LINE('Count: ' || l_count);
-- Check if count is greater than 0
IF l_count > 0 THEN
RETURN TRUE; -- Authentication successful
ELSE
RETURN FALSE; -- Authentication failed
END IF;
EXCEPTION
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
RETURN FALSE; -- Return false on any error
END;
当我在 APEX SQL 命令控制台中测试函数时,我得到了预期的行为。这是我测试的方法:
DECLARE
v_username VARCHAR2(100) := 'tommy';
v_password VARCHAR2(100) := 'password';
v_is_valid BOOLEAN;
BEGIN
v_is_valid := authenticate_user(v_username, v_password);
IF v_is_valid THEN
DBMS_OUTPUT.PUT_LINE('Authentication successful');
ELSE
DBMS_OUTPUT.PUT_LINE('Authentication failed');
END IF;
END;
我已经指示应用程序使用
Custom
类型的自定义身份验证架构。仍然没有任何作用。我正在按照 this 教程进行操作,他的实现效果很好。
这里还有一些配置。
Custom Authentication Schema
Application Authentication