With this operation, you can do your own login page instead of default apex login page.
Firstly, you need to create a package that deal with user login operations. PKG_APP_SECURITY package name is appropriate for this need.
CREATE OR REPLACE PACKAGE BODY PKG_APP_SECURITYAS
PROCEDURE login
(p_uname IN VARCHAR2,p_password IN VARCHAR2,p_session_id IN VARCHAR2,p_flow_page IN VARCHAR2)ISBEGIN-- THIS PROVIDES AUTHENTICATIONwwv_flow_custom_auth_std.login (p_uname => p_uname,p_password => p_password,p_session_id => p_session_id,p_flow_page => p_flow_page || ':' || 1);
EXCEPTIONWHEN OTHERSTHEN RAISE;END login;
PROCEDURE add_user (p_username IN VARCHAR2, p_password IN VARCHAR2)ASBEGININSERT INTO P_USERS (username, PASSWORD)VALUES (UPPER (p_username),get_hash (TRIM (p_username), p_password));
COMMIT;EXCEPTIONWHEN OTHERSTHEN ROLLBACK; RAISE;END add_user;
FUNCTION get_hash (p_username IN VARCHAR2, p_password IN VARCHAR2)RETURN VARCHAR2ASBEGINRETURN DBMS_OBFUSCATION_TOOLKIT.md5 (input_string => UPPER (p_username) || '/' || UPPER (p_password));END get_hash;
PROCEDURE valid_user2 (p_username IN VARCHAR2, p_password IN VARCHAR2)ASv_dummy VARCHAR2 (1);
BEGIN
SELECT '1' INTO v_dummyFROM P_USERSWHERE UPPER (username) = UPPER (p_username)AND PASSWORD = get_hash (p_username, p_password);
EXCEPTIONWHEN NO_DATA_FOUNDTHEN raise_application_error (-20000, 'Invalid username / password.');END valid_user2;
FUNCTION valid_user (p_username IN VARCHAR2, p_password IN VARCHAR2)RETURN BOOLEANASBEGINvalid_user2 (UPPER (p_username), p_password);RETURN TRUE;EXCEPTIONWHEN OTHERSTHEN RETURN FALSE;END valid_user;
END PKG_APP_SECURITY;
The P_USERS table has two columns, types of both columns are varchar2 and first of them is username and second of them is password.
Secondly, you should use an authentication schema. To perform this, in Shared Components, click Authentication Schemas. Then Create Button.
1-> Click “Create Schema” Button.
2-> Write your own authentication schema name, such as “MY AUTH METHOD”.
3-> Then “Create Scheme” button.
4-> After scheme is created, click your authentication schema icon in authentication schemas page.
5-> Then Login Processing tab, in “Authentication Function” textarea, type this:
“RETURN PKG_APP_SECURITY.valid_user”
6-> If this method return false in application the authentication is not successfullied.
7-> Don’t forget, you should set your own authentication schema to as current used.
Last thing we need to do, edit your login page (genrally page 101). Then, in processes tab ( in page processing tab ), click login process. And, type this to process textarea in source tab:
“pkg_app_security.login (P_UNAME =>
101_USERNAME, P_PASSWORD =>
101_PASSWORD, P_SESSION_ID => v(‘APP_SESSION’), P_FLOW_PAGE => :APP_ID );”.
After performed these 3 steps, you can use your own login page with your own user tables in Apex Applications.