Authentification personnalisée dans Oracle APEX
2. Authentification par défaut de APEX
Lorsque vous créez une application Oracle APEX, la page de connexion par défaut est créée avec le numéro de page 101. La connexion par défaut utilise l'authentification APEX (APEX authentication), ce qui signifie que vous devez saisir un username et un password créés par APEX Admin. Dans le cas où vous disposez d'un tableau séparé pour stocker les informations d'utilisateur, vous devez personnaliser l'authentification.
Ok, voici est la page de login par défaut est créée:
3. SQL Script
Pour commencer cet exemple, vous devez exécute Script pour créer un tableau afin de stocker des informations d'utilisateur et des package pour exécuter le processus de connexion (login).
Créez le tableau 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. Déclaration de l'Application Items
Cliquez sur "Shared Component"ici vous permet de déclarer les "Application Items", ce sont les items seront utilisés dans votre application.
Saisissez le nom de Application Items qui est "LOGIN_MESSAGE", sa valeure est l'attribut "LOGIN_MESSAGE" de Session, vous pouvez définir sa valeure dans PL/SQL:
Apex_Util.Set_Session_State('LOGIN_MESSAGE'
,'User not found');
De la même manière, vous créez 2 autres Application Items:
- SESSION_USER_NAME
- SESSION_EMAIL
5. Authentification personnalisée
Ouvrez la page LOGIN sur APEX Page Designer:
Créez une nouvelle Region:
Changez les propriétés de Region que vous venez de créer.
Définissez des conditions d'affichage de cette Region.
Ensuite, vous devez modifier le code traitant Process lorsque l'utilisateur clique au bouton Submit.
- PL/SQL Code:
Pkg_Security.Process_Login(:P101_USERNAME,
:P101_PASSWORD,
:APP_ID);
Enregistrez et réexécutez l'application:
Tutoriels de programmation Oracle APEX
- Qu'est-ce qu'Oracle Application Express?
- Installer Oracle Apex 5.0
- Installer Oracle REST Data Services (ORDS) pour Oracle APEX
- Le Tutoriel de Oracle APEX pour débutant (APEX 5.0)
- Le Tutoriel de Oracle APEX Tabular Form
- Le Tutoriel de Oracle APEX Master Details
- Authentification personnalisée dans Oracle APEX
- Le Tutoriel de Oracle APEX Dynamic Action
- Créer une région de contenu dynamique dans Oracle APEX (PL/SQL Dynamic Content)
- Qu'est-ce que Business Intelligence?
- Installer Oracle BI 11g
Show More