私の素朴さを許してください。しかし、私はこの問題と数時間戦っていますが、何の進歩もありません。私は Oracle にまったく慣れていませんが、まだ多くのカスタム機能に慣れています。
アプリケーションのカスタム認証方式を使用したログイン資格情報の検証に関する関数を (APEX インターフェイスのガイドラインに従って) 記述しようとしています。
ガイドラインには次のように記載されています。
ログインページで入力されたユーザーのユーザー名とパスワードを検証する関数の名前を指定します。何も入力しない場合は、任意のユーザー名/パスワードが成功することを許可します。関数自体は、パッケージ内またはストアド関数として、認証の「PL/SQLコード」テキスト領域で定義できます。この関数は、それを呼び出すログイン プロシージャにブール値を返す必要があります。エンド ユーザーがログイン ページに入力した値にアクセスするために使用できる 2 つの入力パラメーター「p_username」と「p_password」があります。例 「PL/SQL コード」テキストエリアに次のコードを入力します。
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;
users テーブルは 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
);
Apex インターフェイスのProcessing
-> Process
-> Login
->の下。Source
私も解決策を見つけることができないように見えるのは、カスタム認証スキーム構成ページが、私が作成したブール値を返す関数を明確に要求しているときに、プロシージャを要求している理由です。ログイン手順がそれを呼び出すと述べていることは知っていますが、これは検証手順を開始するAPEXインターフェースであり、そこで私のメソッドを探しますか?
どんな助けでも大歓迎です。問題を理解するのに十分な詳細があることを願っています
どうもありがとう