請原諒我的天真,但我一直在爭取這個問題幾個小時,現在沒有任何進展,我失去了我失蹤的東西。我對Oracle很陌生,但仍然掌握了很多自定義功能。Oracle Apex自定義身份驗證錯誤 - 'MY_AUTHENTICATION'不是程序
我想寫一個函數(遵循關於APEX接口的指導)關於驗證使用我的應用程序的自定義身份驗證方案的登錄憑據。
指引狀態:
Specify the name of the function that will verify the user's username and password, after they were entered on a login page. If you enter nothing, you allow any username/password to succeed. The function itself can be defined in the authentication's 'PL/SQL Code' textarea, within a package or as a stored function. This function must return a boolean to the login procedure that calls it. It has 2 input parameters 'p_username' and 'p_password' that can be used to access the values an end user entered on the login page. Examples Enter the following code in the 'PL/SQL Code' textarea
function my_authentication (
p_username in varchar2,
p_password in varchar2)
return boolean
is
l_user my_users.user_name%type := upper(p_username);
l_pwd my_users.password%type;
l_id my_users.id%type;
begin
select id , password
into l_id, l_pwd
from my_users
where user_name = l_user;
return l_pwd = rawtohex(sys.dbms_crypto.hash (
sys.utl_raw.cast_to_raw(p_password||l_id||l_user),
sys.dbms_crypto.hash_sh512));
exception
when NO_DATA_FOUND then return false;
end;
和my_authentication
爲Authentication Function
。
我已經寫的功能甚至沒有那麼複雜,因爲我不加密目前PWD等,試圖剛剛得到的東西的工作
function my_authentication (p_username in varchar2,p_password in varchar2)
return boolean
is
valid NUMBER;
returnvalid BOOLEAN;
begin
begin
select 1
into valid
from users u
where u.sys_user.login = lower(p_username) AND u.sys_user.password = p_password;
exception
when NO_DATA_FOUND then valid := 0;
end;
returnvalid := valid=1;
RETURN returnvalid;
end;
爲了澄清用戶表由3場並且存儲我要驗證的數據的那個是sys_user
(它是具有5個字段的對象類型:id
,fname
,lname
,login
,password
)。
當我設置身份驗證功能名稱my_authentication
並嘗試登錄我得到以下錯誤:
ORA-06550: line 1, column 7: PLS-00221: 'MY_AUTHENTICATION' is not a procedure or is undefined
ORA-06550: line 1, column 7: PL/SQL: Statement ignored
我假設這是從那裏我已經改變
apex_authentication.login(
p_username => :P101_USERNAME,
p_password => :P101_PASSWORD
);
到未來
my_authentication(
p_username => :P101_USERNAME,
p_password => :P101_PASSWORD
);
根據Processing
- >Process
- >Login
- >Source
的Apex接口。我似乎無法找到解決方案的原因是爲什麼當自定義認證方案配置頁明確要求返回一個布爾值的函數時,它是請求一個過程,這是我創建的。我知道它聲明一個登錄過程會調用它,但我認爲這是APEX接口啓動一個驗證過程,通過它尋找我的方法?
任何幫助非常感謝,我希望我有足夠的細節,使我的問題意識
非常感謝
謝謝託尼。我之前改回了它,它仍然不會登錄,但是我的會話過期了,並且剛剛改變了它,現在它完美地工作了 –