我正在使用apex 18.2设置Oracle Apex应用程序。
我想通过电子邮件验证实施用户注册过程,例如,如果从应用程序进行用户注册,系统将生成带有验证链接的电子邮件,如果用户单击该链接,则将注册用户以登录到应用程序。
答案 0 :(得分:1)
不确定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进行自定义身份验证。
希望这会有所帮助。
答案 1 :(得分:-1)
步骤1)在让let设为P1_EMAIL的项目上创建验证。
第2步)选择符合条件部分的常规表达式。将此代码输入常规表达式:
/^[a-z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)?@[a-z][a-zA-Z-0-9]*\.[a-z]+(\.[a-z]+)?$/