Пользовательская аутентификация в Oracle APEX
2. Аутенфикация по умолчанию 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 создана страница login по умолчанию:
3. SQL Script
Чтобы начать этот пример, вам нужно запутить Script чтобы создать таблицу хранения пользователей и пакетов (package) для обработки логина (login).
Создать таблицу 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
-- 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. Объявить Application Items
Нажмите на "Shared Component" здесь позволяет вам объявить "Application Items", это items которые будут использовать в вашем приложении.
Введите Application Items с названием "LOGIN_MESSAGE", его значение является атрибут "LOGIN_MESSAGE" в Session, вы можете настроить его значение в PL/SQL:
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
,'User not found');
Индентично вы можете создать 2 других Application Items:
- SESSION_USER_NAME
- SESSION_EMAIL
5. Кастомизированная аутентификация
Открыть страницу LOGIN в APEX Page Designer:
Создать новый Region:
Изменить атрибуты только что созданным Region.
Настроить условия отображения для этого Region.
Далее вам нужно изменить код обработки Process когда пользователь нажимает на Submit.
- PL/SQL Code:
Pkg_Security.Process_Login(:P101_USERNAME,
:P101_PASSWORD,
:APP_ID);
Сохранить и перезапустить приложение:
Руководства Oracle APEX
- Что такое Oracle Application Express?
- Установите Oracle Apex 5.0
- Установите Oracle REST Data Services (ORDS) для Oracle APEX
- Руководство Oracle APEX для начинающих (APEX 5.0)
- Руководство Oracle APEX Tabular Form
- Руководство Oracle APEX Master Details
- Пользовательская аутентификация в Oracle APEX
- Руководство Oracle APEX Dynamic Action
- Создание области динамического содержимого в Oracle APEX (PL/SQL Dynamic Content)
- Что такое Business Intelligence?
- Установить Oracle BI 11g
Show More