Oracle Apex - 创建自己的登录页面

Kat*_*ine 2 database oracle11g oracle-apex

我创建了一个新的登录页面,其中只有那些可以在数据库中找到的帐户才能登录我们的主页...我计划的是当我点击登录按钮时,用户将被重定向到主页..我做的这通过创建一个新的分支,然后在条件选项卡中,我把代码用于检查已经在文本字段中输入的帐户的存在..但发生的是它只是显示错误消息'无效的登录凭据'总是...

我确定我们放置的条件中的代码是正确的,,,它可以检测到用户名和密码是错误的,因为它显示我创建的错误消息,当这发生时返回...

这是我条件中的代码.. check_login是一个程序,如果在数据库中找到该帐户,则返回true ...

if CHECK_LOGIN(:P111_USERNAME, :P111_PASSWORD) then return true;
else
return false;
end if;
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我们这个吗?提前致谢

Tom*_*Tom 6

您需要一个自定义身份验证方案来解决此问题,而不是条件分支等.您也不需要构建新的登录页面.标准登录页面将满足您的所有需求,并将简单地使用当前的主动身份验证方案.身份验证方案可以在共享组件下找到.

你可以在这里找到一些oracle文档.当您在Google上搜索"oracle apex custom authentication"时,还会发现大量博客文章!例如Martin D'Souza的这篇文章很有意思.

此外,在创建自定义方案时,您可以单击项目标签以获取帮助.例如,这是在身份验证功能名称帮助中:

在登录页面上输入后,指定将验证​​用户用户名和密码的功能的名称.如果您不输入任何内容,则允许任何用户名/密码成功.函数本身可以在身份验证的"PL/SQL代码"文本区域中,在包中或作为存储函数中定义.

此函数必须向调用它的登录过程返回一个布尔值.它有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;
Run Code Online (Sandbox Code Playgroud)

my_authentication
Run Code Online (Sandbox Code Playgroud)

作为'认证功能'.

请注意,您的函数需要参数p_username和p_password!

您可以将其他字段留空,它们将由默认函数处理!