Oracle Apex - 密码在基于 table 和登录验证的设置日期后过期
Oracle Apex - Password expire after set date based on table and Login validation
我相信你很好。这是我到目前为止得到的细目分类。我有:
- 自定义身份验证模式,引用来自 table 的用户名和密码。 (作品)
我添加了一个 expire_password 列,我想在其中设置一个触发器或函数(不确定具体如何操作),它将在登录页面上进行验证以检查用户的帐户是否正确是否过期。如果它直接过期到更改密码页面,用户将在该页面输入新密码并能够登录。添加新密码后,重置计时器以在设定日期后自动再次使密码过期。
非常感谢您的帮助。
提前致谢
泰巴尼
因为一切都是定制的,所以这里只有一种选择。
- 创建一个数据库作业(使用
DBMS_JOB
或 DBMS_SCHEDULER
),它将调用一个程序,该程序每天检查某人的密码是否会在接下来的几天内过期。如果是这样,给他们发一封电子邮件(使用 UTL_MAIL
或 UTL_SMTP
),告诉他们应该更改密码
- 自定义登录程序检查
sysdate
是否大于密码过期日期。如果是,它将 return false (即不会让登录过程成功结束并拒绝登录尝试)
另一种选择,更接近您的描述。为了通知用户密码过期,您首先必须让他们进入,然后 以某种方式 重定向到 "password change" 页面。
创建一个(存储的)函数来检查某人的密码是否已过期(让它成为 return 布尔值并调用它 f_pwd_exp),例如
function f_pwd_exp (par_app_user)
return boolean
is
l_exp_date date;
begin
select exp_date
into l_exp_date
from your_users_table
where username = par_app_user;
return l_exp_date > trunc(sysdate);
end;
在初始申请页面上,创建一个 Before Header branch that
- 重定向到 "password change" 页面
已将服务器端条件设置为 "PL/SQL Function Body",看起来像
return f_pwd_exp(:APP_USER);
这意味着 - 如果密码已过期,函数将 return 为真并且分支将 触发 并将用户重定向到用于更改密码的页面
现在您有两种方法可以做到;使用它们中的任何一个,它们的组合或生产你自己的。祝你好运!
@littlefoot 已经涵盖了基础知识。我要补充的一件事是你不应该以明文形式存储密码,它们应该被散列并且最好为每个密码生成一个唯一的盐。 Doug Gault 最近在这里有一个相关的 post:https://blogs.oracle.com/apex/custom-authentication-and-authorization-using-built-in-apex-access-control-a-how-to
希望您已经在做类似的事情...
这是我实现此功能的旧应用程序的应用程序示例。
declare
l_users_rec users%rowtype;
begin
if :app_page_id != '101' --login
then
select *
into l_users_rec
from users
where upper(email) = upper(:APP_USER);
if l_users_rec.change_password_flag = 'Y' and :app_page_id != '110' --profile
then
wwv_flow.g_unrecoverable_error := true;
owa_util.redirect_url('f?p=' || :APP_ID || ':110:' || :APP_SESSION);
end if;
end if;
end;
部分 API 已更改。从旧的开始,然后测试新的:
- apex_application.stop_apex_engine(而不是 wwv_flow.g_unrecoverable_error)
- apex_util.redirect_url(而不是 owa_util.redirect_url)
我相信你很好。这是我到目前为止得到的细目分类。我有:
- 自定义身份验证模式,引用来自 table 的用户名和密码。 (作品)
我添加了一个 expire_password 列,我想在其中设置一个触发器或函数(不确定具体如何操作),它将在登录页面上进行验证以检查用户的帐户是否正确是否过期。如果它直接过期到更改密码页面,用户将在该页面输入新密码并能够登录。添加新密码后,重置计时器以在设定日期后自动再次使密码过期。
非常感谢您的帮助。
提前致谢
泰巴尼
因为一切都是定制的,所以这里只有一种选择。
- 创建一个数据库作业(使用
DBMS_JOB
或DBMS_SCHEDULER
),它将调用一个程序,该程序每天检查某人的密码是否会在接下来的几天内过期。如果是这样,给他们发一封电子邮件(使用UTL_MAIL
或UTL_SMTP
),告诉他们应该更改密码 - 自定义登录程序检查
sysdate
是否大于密码过期日期。如果是,它将 return false (即不会让登录过程成功结束并拒绝登录尝试)
另一种选择,更接近您的描述。为了通知用户密码过期,您首先必须让他们进入,然后 以某种方式 重定向到 "password change" 页面。
创建一个(存储的)函数来检查某人的密码是否已过期(让它成为 return 布尔值并调用它 f_pwd_exp),例如
function f_pwd_exp (par_app_user) return boolean is l_exp_date date; begin select exp_date into l_exp_date from your_users_table where username = par_app_user; return l_exp_date > trunc(sysdate); end;
在初始申请页面上,创建一个 Before Header branch that
- 重定向到 "password change" 页面
已将服务器端条件设置为 "PL/SQL Function Body",看起来像
return f_pwd_exp(:APP_USER);
这意味着 - 如果密码已过期,函数将 return 为真并且分支将 触发 并将用户重定向到用于更改密码的页面
现在您有两种方法可以做到;使用它们中的任何一个,它们的组合或生产你自己的。祝你好运!
@littlefoot 已经涵盖了基础知识。我要补充的一件事是你不应该以明文形式存储密码,它们应该被散列并且最好为每个密码生成一个唯一的盐。 Doug Gault 最近在这里有一个相关的 post:https://blogs.oracle.com/apex/custom-authentication-and-authorization-using-built-in-apex-access-control-a-how-to
希望您已经在做类似的事情...
这是我实现此功能的旧应用程序的应用程序示例。
declare
l_users_rec users%rowtype;
begin
if :app_page_id != '101' --login
then
select *
into l_users_rec
from users
where upper(email) = upper(:APP_USER);
if l_users_rec.change_password_flag = 'Y' and :app_page_id != '110' --profile
then
wwv_flow.g_unrecoverable_error := true;
owa_util.redirect_url('f?p=' || :APP_ID || ':110:' || :APP_SESSION);
end if;
end if;
end;
部分 API 已更改。从旧的开始,然后测试新的:
- apex_application.stop_apex_engine(而不是 wwv_flow.g_unrecoverable_error)
- apex_util.redirect_url(而不是 owa_util.redirect_url)