我想在Login页面中添加一个返回team_id的参数,但我无法对用户进行身份验证。以下函数是Oracle Apex身份验证方案中的默认函数,其中我将p_team添加为参数。
function my_authentication (
p_username in varchar2,
p_password in varchar2,
p_team in varchar2
)
return boolean
is
l_user ncr_emp.qlid%type := upper(p_username);
l_pwd ncr_emp.pass%type;
l_team ncr_emp.team_id%type;
begin
select qlid , pass , team_id
into l_user, l_pwd, l_team
from ncr_emp
where upper(qlid) = upper(l_user) and upper(pass)=upper(p_password)
and upper(team_id) = upper(l_team);
return true;
exception
when NO_DATA_FOUND then return false;
end;
当调用下面的函数时它显示错误:
apex_authentication.login(
p_username => :P9999_USERNAME,
p_password => :P9999_PASSWORD,
p_team => :P9999_TEAM
);
错误:
ORA-06550:第1行,第64列:PLS-00306:调用'LOGIN'时参数的数量或类型错误
在此处使用您的自定义验证功能
共享组件/验证方案/(选择当前)/设置/验证功能名称
并保留正常的顶点代码。请注意,您的自定义身份验证函数必须返回布尔值(true或false)。
如果您定义方案类型“自定义”的身份验证方案,您将在身份验证功能名称内联帮助中注意以下内容。
此函数必须向调用它的登录过程返回一个布尔值。它有2个输入参数'p_username'和'p_password',可用于访问最终用户在登录页面上输入的值。
apex_authentication.login定义与您的尝试不符 - 您没有调用自己的函数。
安全模型真的需要接受'团队'吗?这对于建立身份至关重要,还是可以在登录后提名?
至于upper(pass)
,虽然它可能不是'最终代码',但它表明你是从后脚开始 - clear text passwords甚至不应该让它起草,恕我直言。