2

データベースにあるアカウントだけがホームページにログインできる新しいログインページを作成しました...ログインボタンをクリックすると、ユーザーはホームページにリダイレクトされます。これは、新しいブランチを作成し、[条件]タブに、テキストフィールドに入力されたアカウントの存在を確認するためのコードを入力します。しかし、何が起こったのかというと、エラーメッセージ「無効なログイン資格情報」が常に表示されます。 ..。。

私たちが置いた条件のコードは正しいと確信しています、、、、これが起こったときに返される私が作成したエラーメッセージを示しているので、ユーザー名とパスワードが間違っていることを検出できます...

これが私の条件のコードです。check_loginは、アカウントがデータベースで見つかった場合にtrueを返すプロシージャです。

if CHECK_LOGIN(:P111_USERNAME, :P111_PASSWORD) then return true;
else
return false;
end if;

誰かがこれで私たちを助けることができますか?前もって感謝します

4

1 に答える 1

6

これを解決するには、条件分岐などではなく、カスタム認証スキームが必要です。また、新しいログイン ページを作成する必要もありません。標準のログイン ページには必要なものがすべて含まれており、現在アクティブな認証スキームを使用するだけです。認証方式は、共有コンポーネントの下にあります。

ここでいくつかのオラクルのドキュメントを見つけることができます。googleで「oracle apex custom authentication」と検索するとブログ記事もたくさん出てきます!

また、カスタム スキームを作成する場合は、アイテム ラベルをクリックしてヘルプを表示できます。たとえば、これは認証関数名のヘルプにあります。

ログインページで入力されたユーザーのユーザー名とパスワードを検証する関数の名前を指定します。何も入力しない場合は、任意のユーザー名/パスワードが成功することを許可します。関数自体は、パッケージ内またはストアド関数として、認証の「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_md5 ));
exception
    when NO_DATA_FOUND then return false;
end;

my_authentication

「認証機能」として。

関数にはパラメーター p_username と p_password が必要であることに注意してください。

他のフィールドは空白のままにしておくことができます。それらはデフォルトの関数によって処理されます!

于 2012-12-17T08:46:00.980 に答える