You are on page 1of 15

http://o7planning.

org/web/fe/default/en/document/1349977/custom-authenticationin-oracle-apex

Custom Authentication in Oracle APEX


1- Introduction
2- Default authentication of APEX
3- SQL Script
4- Declaring Application Items
5- Custom Authentication

1- Introduction
This document is based on:

Oracle APEX 5.0

2- Default authentication of APEX


When you create an Oracle APEX application, the default login page is created with
page number is 101. Default login uses APEX authentication, which means you have
to enter a username and password created by the APEX Admin. In case you have a
separate table to store user information, you need to customized authentication.
OK this is the default login page is created:

3- SQL Script
To begin this example, you need to run Script to create table to store user and create
package.
Create USER_ACCOUNT table:
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

create table USER_ACCOUNT


(
USER_NAME VARCHAR2(30) not null,
PASSWORD VARCHAR2(30) not null,
USER_TYPE VARCHAR2(10) not null,
ACTIVE
VARCHAR2(1) not null,
EMAIL
VARCHAR2(64) not null,
FULL_NAME VARCHAR2(64) not null
) ;
alter
add
alter
add

table USER_ACCOUNT
constraint USER_ACCOUNT_PK primary key (USER_NAME) ;
table USER_ACCOUNT
constraint USER_ACCOUNT_UK unique (EMAIL) ;

----------------------------------insert into user_account (USER_NAME, PASSWORD, USER_TYPE,


ACTIVE, EMAIL, FULL_NAME)
values ('tom', 'tom123', 'admin', 'Y', 'tom@example.com', 'Tom');
insert into user_account (USER_NAME, PASSWORD, USER_TYPE,

20
21
22
23
24
25
26
27
28
29
30

ACTIVE, EMAIL, FULL_NAME)


values ('jerry', 'jerry123', 'user', 'Y', 'jerry@example.com', 'Jerry');
insert into user_account (USER_NAME, PASSWORD, USER_TYPE,
ACTIVE, EMAIL, FULL_NAME)
values ('donald', 'donald123', 'guest', 'N', 'donald@example.com',
'Donald');
Commit;

PKG_SECURITY
?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33

Create Or Replace Package Pkg_Security Is


Function Authenticate_User(p_User_Name Varchar2
,p_Password Varchar2) Return Boolean;
----Procedure Process_Login(p_User_Name Varchar2
,p_Password Varchar2
,p_App_Id
Number);
End Pkg_Security;
/
Create Or Replace Package Body Pkg_Security Is
Function Authenticate_User(p_User_Name Varchar2
,p_Password Varchar2) Return Boolean As
v_Password User_Account.Password%Type;
v_Active
User_Account.Active%Type;
v_Email
User_Account.Email%Type;
Begin
If p_User_Name Is Null Or p_Password Is Null Then
-- Write to Session, Notification must enter a username and
password

Apex_Util.Set_Session_State('LOGIN_MESSAGE'
,'Please enter Username and
password.');
Return False;
End If;
---Begin
Select u.Active
,u.Password
,u.Email
Into v_Active
,v_Password
,v_Email
From User_Account u

34
Where u.User_Name = p_User_Name;
Exception
35
When No_Data_Found Then
36
37
-- Write to Session, User not found.
38
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
39
,'User not found');
Return False;
40
End;
41
If v_Password <> p_Password Then
42
43
-- Write to Session, Password incorrect.
44
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
45
,'Password incorrect');
Return False;
46
End If;
47
If v_Active <> 'Y' Then
48
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
49
,'User locked, please contact admin');
50
Return False;
End If;
51
--52
-- Write user information to Session.
53
-54
Apex_Util.Set_Session_State('SESSION_USER_NAME'
,p_User_Name);
55
Apex_Util.Set_Session_State('SESSION_EMAIL'
56
,v_Email);
57
--58
--59
Return True;
End;
60
61
-------------------------------------62
Procedure Process_Login(p_User_Name Varchar2
63
,p_Password Varchar2
64
,p_App_Id
Number) As
65
v_Result Boolean := False;
Begin
66
v_Result := Authenticate_User(p_User_Name
67
,p_Password);
68
If v_Result = True Then
69
-- Redirect to Page 1 (Home Page).
Wwv_Flow_Custom_Auth_Std.Post_Login(p_User_Name -- p_User_Name
70
,p_Password -- p_Password
71
,v('APP_SESSION') -72 p_Session_Id
73
,p_App_Id || ':1' -74 p_Flow_page
);
75
Else
76
-- Login Failure, redirect to page 101 (Login Page).
77
Owa_Util.Redirect_Url('f?p=&APP_ID.:101:&SESSION.');
78
End If;
79
End;

80
81
82
83
84
85
86 End Pkg_Security;
87 /
88
89
90
91
92

4- Declaring Application Items


Click on the "Shared Components", here allows you to declare the "Application
Items", it is the items will be used in your application.

Enter a name for the Application Item is "LOG_MESSAGE", its value


is "LOGIN_MESSAGE" attribute of Session, you can set its value inPL/SQL:
?

1 Apex_Util.Set_Session_State('LOGIN_MESSAGE'
2

,'User not found');

Similarly, you create 2 Application Items:

SESSION_USER_NAME

SESSION_EMAIL

5- Custom Authentication
Open LOGIN page in APEX Page designer:

Create new Region:

Change the properties for the newly created Region.

Set display conditions for this Region.

Next you have to modify code handling process when the user clicks the Submit button.

PL/SQL Code:

1 Pkg_Security.Process_Login(:P101_USERNAME,
:P101_PASSWORD,
2
:APP_ID);
3

Save and running your apps:

You might also like