APEX_CUSTOM_AUTHパッケージを使用すると、認証およびセッション管理に関連する様々な操作を実行できます。
このセクションの構成は次のとおりです。
このファンクションは、アプリケーションのカレント・ページ内のページ・レベル・アイテムの存在を確認します。このファンクションでは、パラメータp_item_nameが必要です。このファンクションはブール値(trueまたはfalse)を戻します。
構文
APEX_CUSTOM_AUTH.APPLICATION_PAGE_ITEM_EXISTS(
p_item_name IN VARCHAR2)
RETURN BOOLEAN;
パラメータ
表5-1に、APPLICATION_PAGE_ITEM_EXISTSファンクションで使用可能なパラメータを示します。
例
次の例では、アプリケーションのカレント・ページ内にページ・レベル・アイテムITEM_NAMEが存在するかどうかを確認します。
DECLARE
L_VAL BOOLEAN;
BEGIN
VAL := APEX_CUSTOM_AUTH.APPLICATION_PAGE_ITEM_EXISTS(:ITEM_NAME);
IF L_VAL THEN
htp.p('Item Exists');
ELSE
htp.p('Does not Exist');
END IF;
END;
このファンクションは、カレント・ページの認証属性がパブリック・ページに設定されているかどうかを確認し、ブール値(trueまたはfalse)を戻します。
|
参照: 『Oracle Application Expressアプリケーション・ビルダー・ユーザーズ・ガイド』の「ページ属性の編集」 |
構文
APEX_CUSTOM_AUTH.CURRENT_PAGE_IS_PUBLIC RETURN BOOLEAN;
例
次の例では、アプリケーションのカレント・ページがパブリックかどうかを確認します。
DECLARE
L_VAL BOOLEAN;
BEGIN
L_VAL := APEX_CUSTOM_AUTH.CURRENT_PAGE_IS_PUBLIC;
IF L_VAL THEN
htp.p('Page is Public');
ELSE
htp.p('Page is not Public');
END IF;
END;
このプロシージャは、SET_USERおよびSET_SESSION_IDプロシージャを組み合せて、1回のコールに結合します。
構文
APEX_CUSTOM_AUTH.DEFINE_USER_SESSION(
p_user IN VARCHAR2,
p_session_id IN NUMBER);
パラメータ
表5-2に、DEFINE_USER_SESSIONプロシージャで使用可能なパラメータを示します。
例
次の例では、新しいセッションIDが生成され、カレント・アプリケーション・ユーザーとともに登録されます。
APEX_CUSTOM_AUTH.DEFINE_USER_SESSION (
:APP_USER,
APEX_CUSTOM_AUTH.GET_NEXT_SESSION_ID);
このプロシージャは、指定したアプリケーションのカレント認証スキームで使用されるセッションCookieのプロパティを取得します。これらのプロパティは、認証スキームCookie属性を表示することによって、アプリケーション・ビルダーに直接表示できます。
構文
APEX_CUSTOM_AUTH.GET_COOKIE_PROPS(
p_app_id IN NUMBER,
p_cookie_name OUT VARCHAR2,
p_cookie_path OUT VARCHAR2,
p_cookie_domain OUT VARCHAR2
p_secure OUT BOOLEAN);
パラメータ
表5-3に、GET_COOKIE_PROPSプロシージャで使用可能なパラメータを示します。
表5-3 GET_COOKIE_PROPSのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
現行のワークスペースのアプリケーションIDです。 |
|
|
Cookie名です。 |
|
|
Cookieパスです。 |
|
|
Cookieドメインです。 |
|
|
Cookieのsecureプロパティを設定するためのフラグです。 |
例
次の例では、カレント・アプリケーションの認証スキームで使用されるセッションCookieの値を取得します。
DECLARE
l_cookie_name varchar2(256);
l_cookie_path varchar2(256);
l_cookie_domain varchar2(256);
l_secure boolean;
BEGIN
APEX_CUSTOM_AUTH.GET_COOKIE_PROPS(
p_app_id => 2918,
p _cookie_name => l_cookie_name,
p _cookie_path => l_cookie_path,
p _cookie_domain => l_cookie_domain,
p_secure => l_secure);
END;
このプロシージャは、カレント・アプリケーションのカレント認証スキームのLDAP属性を取得します。これらのプロパティは、認証スキーム属性を表示することによって、アプリケーション・ビルダーに直接表示できます。
構文
APEX_CUSTOM_AUTH.GET_LDAP_PROPS(
p_ldap_host OUT VARCHAR2,
p_ldap_port OUT INTEGER,
p_ldap_dn OUT VARCHAR2,
p_ldap_edit_function OUT VARCHAR2);
パラメータ
表5-4に、GET_LDAP_PROPSプロシージャで使用可能なパラメータを示します。
表5-4 GET_LDAP_PROPSのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
LDAPホスト名です。 |
|
|
LDAPポート番号です。 |
|
|
LDAP DN文字列です。 |
|
|
LDAP編集ファンクション名です。 |
例
次の例では、カレント・アプリケーションに関連付けられているLDAP属性を取得します。
DECLARE
l_ldap_host VARCHAR2(256);
l_ldap_port INTEGER;
l_ldap_dn VARCHAR2(256);
l_ldap_edit_function VARCHAR2(256);
BEGIN
APEX_CUSTOM_AUTH.GET_LDAP_PROPS (
p_ldap_host => l_ldap_host,
p_ldap_port => l_ldap_port,
p_ldap_dn => l_ldap_dn,
p_ldap_edit_function => l_ldap_edit_function);
END;
このファンクションは、Oracle Application Express順序ジェネレータから次のセッションIDを生成します。このファンクションは数値を戻します。
構文
APEX_CUSTOM_AUTH.GET_NEXT_SESSION_ID RETURN NUMBER;
例
次の例では、次のセッションIDを生成して変数に格納します。
DECLARE
VAL NUMBER;
BEGIN
VAL := APEX_CUSTOM_AUTH.GET_NEXT_SESSION_ID;
END;
このファンクションは、カレント・ユーザーのワークスペースを示すセキュリティ・グループIDの数値を戻します。
構文
APEX_CUSTOM_AUTH.GET_SECURITY_GROUP_ID RETURN NUMBER;
例
次の例では、カレント・ユーザーのセキュリティ・グループIDを取得します。
DECLARE
VAL NUMBER;
BEGIN
VAL := APEX_CUSTOM_AUTH.GET_SECURITY_GROUP_ID;
END;
このファンクションは、APEX_APPLICATION.G_INSTANCEグローバル変数を戻します。GET_SESSION_IDは数値を戻します。
構文
APEX_CUSTOM_AUTH.GET_SESSION_ID RETURN NUMBER;
例
次の例では、カレント・ユーザーのセッションIDを取得します。
DECLARE
VAL NUMBER;
BEGIN
VAL := APEX_CUSTOM_AUTH.GET_SESSION_ID;
END;
このファンクションは、現行のブラウザ・セッションのページ・リクエストのコンテキストでセッションCookieによって検索されたOracle Application ExpressのセッションIDを戻します。
構文
APEX_CUSTOM_AUTH.GET_SESSION_ID_FROM_COOKIE RETURN NUMBER;
例
次の例では、現行のセッションCookieからセッションIDを取得します。
DECLARE
VAL NUMBER;
BEGIN
VAL := APEX_CUSTOM_AUTH.GET_SESSION_ID_FROM_COOKIE;
END;
このファンクションは、APEX_APPLICATION.G_USERグローバル変数(VARCHAR2)を戻します。
構文
APEX_CUSTOM_AUTH.GET_USER RETURN VARCHAR2;
例
次の例では、カレント・セッションに関連付けられているユーザー名を取得します。
DECLARE
VAL VARCHAR2(256);
BEGIN
VAL := APEX_CUSTOM_AUTH.GET_USER;
END;
このファンクションは、内部セッション表の現行のOracle Application Expressセッションに登録されたユーザー名を戻します。通常、このユーザー名は、カレント・ページを実行している認証されたユーザーと同じ名前です。
構文
APEX_CUSTOM_AUTH.GET_USERNAME RETURN VARCHAR2;
例
次の例では、カレント・アプリケーション・セッションに登録されているユーザー名を取得します。
DECLARE
VAL VARCHAR2(256);
BEGIN
VAL := APEX_CUSTOM_AUTH.GET_USERNAME;
END;
このファンクションは、有効なセッションが存在するかどうかを確認するカレント・アプリケーションの認証スキームを実行することによって取得されるブール結果を戻します。認証スキームのページ・エントリのブール結果を戻します。
構文
APEX_CUSTOM_AUTH.IS_SESSION_VALID RETURN BOOLEAN;
例
次の例では、カレント・セッションが有効かどうかを検証します。
DECLARE
L_VAL BOOLEAN;
BEGIN
L_VAL := APEX_CUSTOM_AUTH.IS_SESSION_VALID;
IF L_VAL THEN
htp.p('Valid');
ELSE
htp.p('Invalid');
END IF;
END;
「ログインAPI」とも呼ばれるこのプロシージャは、認証およびセッションの登録を実行します。
構文
APEX_CUSTOM_AUTH.LOGIN(
p_uname IN VARCHAR2 DEFAULT NULL,
p_password IN VARCHAR2 DEFAULT NULL,
p_session_id IN VARCHAR2 DEFAULT NULL,
p_app_page IN VARCHAR2 DEFAULT NULL,
p_entry_point IN VARCHAR2 DEFAULT NULL,
p_preserve_case IN BOOLEAN DEFAULT FALSE);
パラメータ
表5-5に、LOGINプロシージャで使用可能なパラメータを示します。
表5-5 LOGINのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ユーザーのログイン名です。 |
|
|
クリア・テキストのユーザー・パスワードです。 |
|
|
現行のOracle Application ExpressセッションID。 |
|
|
カレント・アプリケーションIDです。ログイン・ページの後にコロン(:)で区切って指定します。 |
|
|
内部でのみ使用します。 |
|
|
trueの場合は、セッションの登録時に |
例
次の例では、ユーザーの認証およびセッションの登録を実行します。
BEGIN
APEX_CUSTOM_AUTH.LOGIN (
p_uname => 'FRANK',
p_password => 'secret99',
p_session_id => V('APP_SESSION'),
p_app_page => :APP_ID||':1');
END;
|
注意: p_session_id引数にバインド変数表記は使用しないでください。 |
このプロシージャは、セッションCookieの設定解除および新しい位置へのリダイレクトを行うことによって、カレント・セッションからのログアウトを実行します。
構文
APEX_CUSTOM_AUTH.LOGOUT(
p_this_app IN VARCHAR2 DEFAULT NULL,
p_next_app_page_sess IN VARCHAR2 DEFAULT NULL,
p_next_url IN VARCHAR2 DEFAULT NULL);
パラメータ
表5-6に、LOGOUTプロシージャで使用可能なパラメータを示します。
表5-6 LOGOUTのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
カレント・アプリケーションIDです。 |
|
|
リダイレクト先のアプリケーションおよびページ番号です。複数のページをコロン(:)で区切って指定します。また、セッションIDの制御が必要な場合は、オプションでこれらのページの後にコロン(:)、続けてセッションIDを指定します。 |
|
|
リダイレクト先のURLです( |
例
次の例では、カレント・セッションからのロウアウトおよびアプリケーション1000のページ99へのリダイレクトを実行します。
BEGIN
APEX_CUSTOM_AUTH.LOGOUT (
p_this_app => '1000',
p_next_app_page_sess => '1000:99');
END;
認証ステップが完了している場合、このプロシージャはセッションの登録を実行します。Oracle Application Expressアプリケーション・ページのコンテキスト内からのみコールできます。
構文
APEX_CUSTOM_AUTH.POST_LOGIN(
p_uname IN VARCHAR2 DEFAULT NULL,
p_session_id IN VARCHAR2 DEFAULT NULL,
p_app_page IN VARCHAR2 DEFAULT NULL,
p_preserve_case IN BOOLEAN DEFAULT FALSE);
パラメータ
表5-7に、POST_LOGINプロシージャで使用可能なパラメータを示します。
表5-7 POST_LOGINのパラメータ
| パラメータ | 説明 |
|---|---|
|
|
ユーザーのログイン名です。 |
|
|
現行のOracle Application ExpressセッションID。 |
|
|
カレント・アプリケーションIDです。ログイン・ページの後にコロン(:)で区切って指定します。 |
|
|
trueの場合は、セッションの登録時に |
例
次の例では、認証の成功に続いて、セッションの登録を実行します。
BEGIN
APEX_CUSTOM_AUTH.POST_LOGIN (
p_uname => 'FRANK',
p_session_id => V('APP_SESSION'),
p_app_page => :APP_ID||':1');
END;
このファンクションは、現行のOracle Application ExpressセッションIDを含むグローバル・パッケージ変数に基づいてブール結果を戻します。結果が正の数の場合はtrue、結果が負の数の場合はfalseを戻します。
構文
APEX_CUSTOM_AUTH.SESSION_ID_EXISTS RETURN BOOLEAN;
例
次の例では、現行のセッションIDが有効かどうかおよび存在するかどうかを確認します。
DECLARE
L_VAL BOOLEAN;
BEGIN
L_VAL := APEX_CUSTOM_AUTH.SESSION_ID_EXISTS;
IF VAL THEN
htp.p('Exists');
ELSE
htp.p('Does not exist');
END IF;
END;
このプロシージャは、APEX_APPLICATION.G_INSTANCEグローバル変数を設定します。このプロシージャには、セッションIDを指定するパラメータP_SESSION_ID(NUMBER)が必要です。
構文
APEX_CUSTOM_AUTH.SET_SESSION_ID(
p_session_id IN NUMBER);
パラメータ
表5-8に、SET_SESSION_IDプロシージャで使用可能なパラメータを示します。
例
次の例では、登録されたセッションIDの値がブラウザCookieから取得されます。
APEX_CUSTOM_AUTH.SET_SESSION_ID(APEX_CUSTOM_AUTH.GET_SESSION_ID_FROM_COOKIE);
このプロシージャは、GET_NEXT_SESSION_IDおよびSET_SESSION_IDの操作を1回のコールに結合します。
構文
APEX_CUSTOM_AUTH.SET_SESSION_ID_TO_NEXT_VALUE;
例
次の例では、カレント・セッションが有効でない場合、新しいセッションIDが生成され、登録されます。
IF NOT APEX_CUSTOM_AUTH.SESSION_ID_EXISTS THEN
APEX_CUSTOM_AUTH.SET_SESSION_ID_TO_NEXT_VALUE;
END IF;
このプロシージャは、APEX_APPLICATION.G_USERグローバル変数を設定します。SET_USERには、ユーザーIDを定義するパラメータP_USER(VARCHAR2)が必要です。
構文
APEX_CUSTOM_AUTH.SET_USER(
p_user IN VARCHAR2);
パラメータ
表5-9に、SET_USERプロシージャで使用可能なパラメータを示します。
例
次の例では、カレント・アプリケーション・ユーザーがNOBODYの場合、JOHN.DOEがアプリケーション・ユーザーとして登録されます。
IF V('APP_USER') = 'NOBODY' THEN
APEX_CUSTOM_AUTH.SET_USER('JOHN.DOE');
END IF;