我创建了一个新的登录页面,只有那些可以在数据库中找到的帐户才能登录我们的主页... 我计划的是当我点击登录按钮时,用户将被重定向到主页..我通过创建一个新的分支然后在条件选项卡中执行此操作,我将用于检查存在的帐户的代码已在文本字段中输入..但发生的事情是它只是显示错误消息'无效登录凭据'始终...
我确信在我们放置的条件中的代码是正确的,,,它可以检测到用户名和密码是错误的,因为它显示我创建的错误消息,当这发生时返回...
这是我条件中的代码.. check_login是一个程序,如果在数据库中找到该帐户,则返回true ...
if CHECK_LOGIN(:P111_USERNAME, :P111_PASSWORD) then return true;
else
return false;
end if;
任何人都可以帮我们这个吗?提前致谢
答案 0 :(得分:6)
您需要一个自定义身份验证方案来解决此问题,而不是条件分支等。您也不需要构建新的登录页面。标准登录页面将满足您的所有需求,并将简单地使用当前的主动身份验证方案。身份验证方案可以在共享组件下找到。
您可以找到一些oracle documentation here。当您在Google上搜索“oracle apex custom authentication”时,还会发现大量博客文章!例如This post by Martin D'Souza很有意思。
此外,在创建自定义方案时,您可以单击项目标签以获取帮助。例如,这是在身份验证功能名称帮助中:
指定将验证用户用户名的函数的名称 和密码,在登录页面上输入后。如果你输入 没有,你允许任何用户名/密码成功。功能 本身可以在身份验证的'PL / SQL代码'textarea中定义, 在包装内或作为储存的功能。
此函数必须向调用的登录过程返回一个布尔值 它。它有2个输入参数'p_username'和'p_password'即可 用于访问最终用户在登录页面上输入的值。
例如,在“PL / SQL代码”textarea
中输入以下代码function my_authentication ( p_username in varchar2, p_password in varchar2 ) return boolean is l_user my_users.user_name%type := upper(p_username); l_pwd my_users.password%type; l_id my_users.id%type; begin select id , password into l_id, l_pwd from my_users where user_name = l_user; return l_pwd = rawtohex(sys.dbms_crypto.hash ( sys.utl_raw.cast_to_raw(p_password||l_id||l_user), sys.dbms_crypto.hash_md5 )); exception when NO_DATA_FOUND then return false; end;
和
my_authentication
作为“身份验证功能”。
请注意,您的函数需要参数p_username和p_password!
您可以将其他字段留空,它们将由默认函数处理!