Tác giả Chủ đề: Hướng dẫn xác thực tùy chỉnh trong Oracle APEX  (Đã xem 676 lần)

0 Thành viên và 1 Khách đang xem chủ đề.

Ngủ rồi CCNACCNP

  • Hero Member
  • *****
  • Bài viết: 3980
  • Số Lần: +73/-0
Hướng dẫn xác thực tùy chỉnh trong Oracle APEX
« vào: Tháng Tư 19, 2019, 04:14:49 PM »
Mục lục

1. Giới thiệu
2- Xác thực mặc định của APEX
3- Tập lệnh SQL
4- Khai báo các mục ứng dụng
5- Xác thực tùy chỉnh


1. Giới thiệu

     Tài liệu này dựa trên:   Oracle APEX 5.0

2. Xác thực mặc định của APEX

     Khi bạn tạo một ứng dụng Oracle APEX, trang đăng nhập mặc định được tạo với số trang là 101. Đăng nhập mặc định sử dụng xác thực APEX, có nghĩa là bạn phải nhập tên người dùng và mật khẩu được tạo bởi Quản trị viên APEX. Trong trường hợp bạn có một bảng riêng để lưu thông tin người dùng, bạn cần tùy chỉnh xác thực.
     OK đây là trang đăng nhập mặc định được tạo:


3. Tập lệnh SQL

     Để 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à tạo gói.
     Tạo bảng USER_ACCOUNT:

Trích dẫn
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

Trích dẫn
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
        Where  u.User_Name = p_User_Name;
     Exception
        When No_Data_Found Then
     
           -- Write to Session, User not found.
           Apex_Util.Set_Session_State('LOGIN_MESSAGE'
                                      ,'User not found');
           Return False;
     End;
     If v_Password <> p_Password Then
   
        -- Write to Session, Password incorrect.
        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;
     ---
     -- Write user information to Session.
     --
     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
        -- Redirect to Page 1 (Home Page).
        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
        -- Login Failure, redirect to page 101 (Login Page).
        Owa_Util.Redirect_Url('f?p=&APP_ID.:101:&SESSION.');
     End If;
  End;
 
End Pkg_Security;
/

4. Khai báo các mục ứng dụng

Nhấp vào "Thành phần được chia sẻ", ở đây cho phép bạn khai báo "Mục ứng dụng", đó là các mục sẽ được sử dụng trong ứng dụng của bạn.






Nhập tên cho Mục ứng dụng là "LOG_MESSAGE", giá trị của nó là thuộc tính "LOGIN_MESSAGE" của Phiên, bạn có thể đặt giá trị của nó trong PL / SQL:

Trích dẫn
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
                                             ,'User not found');





Tương tự, bạn tạo 2 Mục ứng dụng:

Trích dẫn
      SESSION_USER_NAME
      SESSION_EMAIL



5. Tùy chỉnh Xác thực

     Mở trang ĐĂNG NHẬP trong Trình thiết kế trang APEX:


Tạo khu vực mới:





Thay đổi các thuộc tính cho Vùng mới được tạo.


Đặt điều kiện hiển thị cho Vùng này.






Tiếp theo, bạn phải sửa đổi quy trình xử lý mã khi người dùng nhấp vào nút Gửi.


PL/SQL Code:

Trích dẫn
Pkg_Security.Process_Login(:P101_USERNAME,
                           :P101_PASSWORD,
                           :APP_ID);


Lưu và chạy ứng dụng của bạn:




Chúc các bạn thành công.   Tom_and_Jerry 1.gif
« Sửa lần cuối: Tháng Sáu 23, 2019, 03:00:28 PM gửi bởi NetworkEngineer »


Ngủ rồi CCIEInternetworkExpert

  • Sr. Member
  • ****
  • Bài viết: 444
  • Số Lần: +1/-0
Hướng dẫn xác thực tùy chỉnh trong Oracle APEX
« Trả lời #1 vào: Tháng Tư 19, 2019, 04:14:51 PM »
 Tom_and_Jerry 1.gif


 

Related Topics

  Tiêu đề / Tác giả Trả lời Bài mới
0 Trả lời
67 Lượt xem
Bài mới Tháng Năm 15, 2018, 10:36:10 PM
gửi bởi VietHosting
1 Trả lời
31 Lượt xem
Bài mới Tháng Tư 18, 2019, 01:21:21 PM
gửi bởi CCIEInternetworkExpert
2 Trả lời
99 Lượt xem
Bài mới Tháng Sáu 23, 2019, 03:04:06 PM
gửi bởi NetworkEngineer
1 Trả lời
756 Lượt xem
Bài mới Tháng Tư 19, 2019, 02:30:53 PM
gửi bởi CCIEInternetworkExpert
2 Trả lời
452 Lượt xem
Bài mới Tháng Sáu 23, 2019, 03:01:20 PM
gửi bởi NetworkEngineer