Не уверен, что Oracle поддерживает это "из коробки", но вы всегда можете создать собственный процесс для этого.
Вам, вероятно, понадобятся пользовательская функция аутентификации, пользовательские пользователи и таблица непроверенных пользователей.Что-то вроде:
-- This table stores user information.
create table users_tbl (
id number generated always as identity
, username varchar2(30)
, password varchar2(100)
, email_address varchar2(100)
-- etc
);
-- This table stores temporary/unverified user data.
create table unverified_users_tbl (
id number generated always as identity
, username varchar2(30)
, password varchar2(100)
, email_address varchar2(100)
, verification_code varchar2(100) -- you can use sys_guid() function to generate code. also make this unique.
, expiration_date date -- you can set when the verification_code expires
, verified_flag varchar2(1) -- Y/N
-- etc
);
Затем создайте общедоступную форму страницы для регистрации пользователя, которая вставляет данные в пользовательский файл unverified_users_tbl и отправляет электронное письмо со ссылкой для подтверждения.Вероятно, лучше использовать процедуру, чтобы сделать оба.Примерно так:
Давайте предположим следующее:
Страница 1 -> Страница регистрации (общедоступная) - имеет все необходимые поля для регистрации пользователя.
Страница 2 -> Проверкастраница (общедоступная) - имеет поле P2_VERIFICATION_CODE - имеет страницу «При загрузке» для проверки кода.
Вот несколько идей для процедур:
create procedure register ( p_username in varchar2
, p_password in varchar2
, p_email_address in varchar2 )
is
l_verification_code varchar2(100);
l_subject varchar2(100);
l_message varchar2(4000);
begin
insert
into unverified_users_tbl ( username
, password
, verification_code
, expiration_date )
values ( p_username
, encrypt(p_password) -- encrypt password here.
, sys_guid()
, sysdate + 1 -- expires after 24 hours )
returning verification_code
into l_verification_code;
l_subject := 'Verify your account';
l_message := 'Verify your account by clicking this link. http://your-apex-url/' || apex_util.prepare_url( p_url => 'f?p=YOU_APP_ID:2:::NO::P2_VERIFICATION_CODE:' || l_verification_code );
-- call your send mail procedure/function here.
send_mail ( p_email_address, p_subject, p_message );
end;
/
Затем на вашей странице 2 (Страница подтверждения).), выполните PL / SQL в процессе загрузки страницы.Что-то вроде:
begin
if ( verify_code ( :P2_VERIFICATION_CODE ) = true ) then
-- display verified message
else
-- display error message
end if;
end;
/
-- returns true if verified otherwise returns false
create function verify_code ( p_verification_code ) return boolean
is
begin
-- check if code exists and not expired.
update unverified_users_tbl
set verified_flag = 'Y'
where verification_code = p_verification_code
and expiration_date >= sysdate;
-- sql%rowcount will return the number of records affected in the update statement above.
-- should not return more than 1 otherwise something went wrong here.
if ( sql%rowcount = 1 ) then
-- we're here because we successfully verified the code
-- copy the record to the users_tbl
insert
into users_tbl ( username
, password
, email_address
-- etc
)
select username
, password
, email_address
-- etc
from unverified_users_tbl
where verification_code = p_verification_code;
commit;
return true;
else
-- we're here because the verification_code is either invalid or expired.
return false;
end if;
end;
/
Ваша функция аутентификации должна проверяться на соответствие вашим пользовательским users_tbl.
Вы можете обратиться к this для пользовательской аутентификации.
Hopeэто помогает.