=============================================================================
https://www.youtube.com/watch?v=P_iYWgzaRek
1. Create An App with default settings
–> Step1: We Need a table Login.
->Run in SQL Commands
CREATE TABLE “LOGIN”
( “LOGIN_PK” NUMBER(7,0) NOT NULL ENABLE,
“ENTITY_OWNER_FK” NUMBER(7,0) NOT NULL ENABLE,
“ENTITY_FK” NUMBER(2,0) NOT NULL ENABLE,
“USERNAME” VARCHAR2(20) NOT NULL ENABLE,
“PASSWORD” VARCHAR2(20) NOT NULL ENABLE,
“EMAIL” VARCHAR2(50),
CONSTRAINT “LOGIN_PK” PRIMARY KEY (“LOGIN_PK”) ENABLE,
CONSTRAINT “LOGIN_UK1” UNIQUE (“ENTITY_OWNER_FK”, “ENTITY_FK”) ENABLE,
CONSTRAINT “LOGIN_UK2” UNIQUE (“USERNAME”) ENABLE
)
/
–> Step2: We Need a table ENTITY_TYPE.
->Run in SQL Commands
CREATE TABLE “ENTITY_TYPE”
( “ENTITY_PK” NUMBER(2,0) NOT NULL ENABLE,
“ENTITY_TYPE” VARCHAR2(15) NOT NULL ENABLE,
CONSTRAINT “ENTITY_TYPE_PK” PRIMARY KEY (“ENTITY_PK”) ENABLE
)
-> Run SQL Commands
ALTER TABLE “LOGIN” ADD CONSTRAINT “LOGIN_ENTITY_TYPE_FK1” FOREIGN KEY (“ENTITY_FK”)
REFERENCES “ENTITY_TYPE” (“ENTITY_PK”) ENABLE
———> Insert Data——
Entity Type: Entity PK/Entity Type: 1,Admin 2,User
Login: 1,1,1,zafar,zafar,za@im
–> Step3: Now we will create a package which will be used for Authentication.
-> SQL Wokshop -> Object Browser -> Create Packages “+” -> Specification:
create or replace PACKAGE “DV_PKG” AS
FUNCTION login_redirect_fun(uname IN VARCHAR2) RETURN varchar2;
FUNCTION login_valid_fun(p_username IN VARCHAR2,p_password IN VARCHAR2) RETURN boolean;
END DV_PKG;
—————- PACKAGE BODY:————————-SELECT DECODE(ENTITY_FK,1,’100′ change “100” to page number
-> SQL Wokshop -> Object Browser -> Select Packages -> Body
create or replace PACKAGE BODY “DV_PKG” AS
FUNCTION login_redirect_fun(UNAME IN VARCHAR2) RETURN VARCHAR2 AS
V_PAGE_ID VARCHAR2(45);
BEGIN
SELECT DECODE(ENTITY_FK,1,’100′,2,’200′,3,’300′,4,’400′) INTO V_PAGE_ID FROM LOGIN WHERE lower(username)=lower(UNAME);
RETURN ‘:’||V_PAGE_ID;
Exception when no_data_found then
return ‘:5’;
END login_redirect_fun;
FUNCTION login_valid_fun(p_username IN VARCHAR2,p_password IN VARCHAR2) RETURN boolean AS
V_PAGE_ID VARCHAR2(45);
count1 number:=0;
count2 number:=0;
BEGIN
if p_username is not null AND p_password is not null then
select 1 into count1
from login
where LOWER(username)= LOWER(p_username) and LOWER(password) = LOWER(p_password);
if count1=1 then
return true;
end if;
else
return false;
end if;
Exception when no_data_found then
return false;
END login_valid_fun;
END DV_PKG;
–> Step4: Now go to Shared Component->Authentication Scheme and Create New Authentication Scheme
Name: Custom_Authentication_DV
Scheme Type: Custom
Authentication Function Name: ifdr.dv_pkg.login_valid_fun or ifdr.lms_pkg.login_valid_fun
Goto : Login
Post-LogoutURL: URL:f?ps&App_ID.9999
–> Step5: Now go to Login Page -> Processing and replace the existing code with following code.
wwv_flow_custom_auth_std.login(
P_UNAME => :P9999_USERNAME,
P_PASSWORD => :P9999_PASSWORD,
P_SESSION_ID => APEX_APPLICATION.get_session_id,
P_FLOW_PAGE => :APP_ID||ifdr.dv_pkg.login_redirect_fun(:P9999_USERNAME)
);
========== Beautiful Login Page ===========
.t-PageBody–login form#wwvFlowForm{
background:url(#APP_IMAGES#1704529.jpg);
background-repeat:no-repeat;
background-Size:cover;
}
Span.t-Login-logo{
background-image : url( #APP_IMAGES#Logo-IEELcolor_2D.jpg);
background-Size :cover;
width :150px;
height :120px;
}
.t-Login-region{
position:relative;
width:400px;
–height:300px;
margin:0Auto;
background:rgba(130,130,130,.3);
padding:20px 22px;
border:1px solid;
border-top-color:#fbce4a;
border-left-color:#fbce4a;
border-bottom-color:#fbce4a;
border-right-color:#fbce4a;
border-radius:5%;
}
.t-Login-containerBody {
flex-grow: 0;
BACKGROUND-COLOR: #2E2E2E;
flex-shrink: 0;
flex-basis: auto;
display: flex;
flex-direction: column;
margin-top: auto;
margin-bottom: px;
align-items: center;
}
.t-LoginPage–split .t-Login-container {
background-color: #2E2E2E;
//box-shadow: 0 0 0px -4px rgba(0,0,0,.2), 0 0 0 1px rgb(0 0 0 / 4.0);
}
body .t-Login-title {
color:#fbce4a;
}
.t-Form-checkboxLabel, .t-Form-inputContainer .checkbox_group label, .t-Form-inputContainer .radio_group label, .t-Form-label, .t-Form-radioLabel {
color:#fbce4a;
}
.t-Login-region .t-Login-body .apex-item-text {
font-size: 16px;
padding: 4px 36px;
height: 40px;
border-radius: 15px;
}
.a-Button–hot, .t-Button–hot:not(.t-Button–simple), body .ui-button.ui-button–hot, body .ui-state-default.ui-priority-primary {
border-radius: 20px;
}
a-Button–hot:hover, .a-Button–hot:not(:active):focus, .t-Button–hot:not(.t-Button–simple):hover, .t-Button–hot:not(.t-Button–simple):not(:active):focus, body .ui-button.ui-button–hot:hover, body .ui-button.ui-button–hot:not(:active):focus, body .ui-state-default.ui-priority-primary:hover, body .ui-state-default.ui-priority-primary:not(:active):focus {
background-color:#6d5714f2;
}
.a-Icon {
color: yellow;
}