Tùy chỉnh xác thực trong Oracle APEX
2. Xác thực mặc định của APEX
Khi bạn tạo một ứng dụng Oracle APEX, mặc định trang login được tạo ra với mã số trang (page number) là 101. Mặc định việc login sử dụng cách xác thực của APEX (APEX authentication), nghĩa là bạn phải nhập vào username và password được tạo ra bởi APEX Admin. Trong trường hợp bạn có một bảng riêng để tạo lưu thông tin người dùng, bạn cần phải tùy biến xác thực.
OK đây là trang login mặc định được tạo ra:
3. SQL Script
Để bắt đầu ví dụ này, bạn cần chạy Script để tạo bảng lưu trữ người dùng và các package để xử lý đăng nhập (login).
Tạo bảng USER_ACCOUNT:
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 table USER_ACCOUNT
add constraint USER_ACCOUNT_PK primary key (USER_NAME) ;
alter table USER_ACCOUNT
add 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,
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
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
-- Thông báo nhập user name và 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
Where u.User_Name = p_User_Name;
Exception
When No_Data_Found Then
-- Ghi vào Session user không tồn tại.
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
,'User not found');
Return False;
End;
If v_Password <> p_Password Then
-- Thông báo mật khẩu không chính xác.
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
,'Password incorrect');
Return False;
End If;
If v_Active <> 'Y' Then
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
,'User locked, please contact admin');
Return False;
End If;
---
-- Ghi các thông tin người dùng vào Session (Để sử dụng về sau).
--
Apex_Util.Set_Session_State('SESSION_USER_NAME'
,p_User_Name);
Apex_Util.Set_Session_State('SESSION_EMAIL'
,v_Email);
---
---
Return True;
End;
--------------------------------------
Procedure Process_Login(p_User_Name Varchar2
,p_Password Varchar2
,p_App_Id Number) As
v_Result Boolean := False;
Begin
v_Result := Authenticate_User(p_User_Name
,p_Password);
If v_Result = True Then
-- Chuyển tới trang 1 theo mặc định (Trang HOME).
Wwv_Flow_Custom_Auth_Std.Post_Login(p_User_Name -- p_User_Name
,p_Password -- p_Password
,v('APP_SESSION') -- p_Session_Id
,p_App_Id || ':1' -- p_Flow_page
);
Else
-- Chuyển về trang login
Owa_Util.Redirect_Url('f?p=&APP_ID.:101:&SESSION.');
End If;
End;
End Pkg_Security;
/
4. Khai báo Application Items
Click vào mục "Shared Component" ở đây cho phép bạn khai báo các "Application Items", nó là các items sẽ được sử dụng trong ứng dụng của bạn.
Nhập vào một Application Items với tên "LOGIN_MESSAGE", giá trị của nó chính là thuộc tính "LOGIN_MESSAGE" của Session, bạn có thể sét đặt giá trị của nó trong PL/SQL:
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
,'User not found');
Tương tự bạn tạo thêm 2 Application Items khác:
- SESSION_USER_NAME
- SESSION_EMAIL
5. Tùy biến xác thực
Mở trang LOGIN trên APEX Page Designer:
Thêm mới Region:
Thay đổi các thuộc tính cho Region vừa tạo ra.
Sét đặt điều kiện Region này hiển thị
Tiếp theo bạn phải sửa đổi code xử lý Process khi người dùng click vào nút Submit.
- PL/SQL Code:
Pkg_Security.Process_Login(:P101_USERNAME,
:P101_PASSWORD,
:APP_ID);
Save và chạy lại ứng dụng:
Các hướng dẫn Oracle APEX
- Oracle Application Express là gì?
- Cài đặt Oracle APEX 5.0
- Cài đặt Oracle REST Data Services (ORDS) cho Oracle APEX
- Hướng dẫn lập trình Oracle APEX cho người mới bắt đầu (APEX 5.0)
- Hướng dẫn sử dụng Tabular Form trong Oracle APEX
- Hướng dẫn sử dụng Master Details trong Oracle APEX
- Tùy chỉnh xác thực trong Oracle APEX
- Hướng dẫn và ví dụ Oracle APEX Dynamic Action
- Tạo nội dung động trong Oracle APEX (PL/SQL Dynamic Content)
- Business Intelligence là gì?
- Cài đặt Oracle BI 11g
Show More