You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Oracle Apex应用中实现双认证登录方案

Oracle Apex实现双用户表(员工/客户)的双登录认证方案

问题场景

开发Oracle Apex应用时,存在**员工(EMPLOYES)和客户(CLIENTS)**两个独立用户表,二者数据结构差异较大无法合并。已创建SECAPP包,包含:

  • hash_pwd:密码哈希函数
  • authenticate_clients:客户专属认证函数
  • authenticate_employes:员工专属认证函数

需求是设置两个独立登录入口:

  • 使用Apex原生登录页供客户登录
  • 复制原生登录页作为员工专属登录页

尝试直接修改员工登录页流程中的apex_authentication.login为secapp.authenticate_employes未生效,仅当将自定义认证函数设置为当前应用的认证方案时才有效,需实现双认证逻辑。

解决方案:通过包装函数根据登录页ID分支认证逻辑

核心思路是创建一个认证包装函数,根据当前登录页面的APP_PAGE_ID判断调用对应的专属认证函数,再将该包装函数配置为应用的默认认证方案。

步骤1:创建认证包装函数authenticate_wrapper

在SECAPP包中添加以下包装函数:

FUNCTION authenticate_wrapper(
    p_username IN VARCHAR2,
    p_password IN VARCHAR2
) RETURN BOOLEAN IS
BEGIN
    -- 替换为实际的登录页ID:假设原生客户登录页是101,员工登录页是102
    IF :APP_PAGE_ID = 101 THEN
        RETURN SECAPP.authenticate_clients(p_username, p_password);
    ELSIF :APP_PAGE_ID = 102 THEN
        RETURN SECAPP.authenticate_employes(p_username, p_password);
    ELSE
        -- 非法登录页直接返回认证失败
        RETURN FALSE;
    END IF;
END authenticate_wrapper;

步骤2:配置应用的认证方案

  1. 进入Apex应用的共享组件 -> 认证方案
  2. 创建或修改当前使用的认证方案,将认证函数设置为SECAPP.authenticate_wrapper
  3. 按需配置会话超时、密码验证规则等其他参数

步骤3:配置两个登录页的流程

  • 客户登录页(原生页):保持原有流程逻辑不变,包装函数会自动识别页面ID调用客户认证逻辑
  • 员工登录页(复制页):保留原有流程即可,包装函数会根据页面ID自动切换到员工认证逻辑

原理说明

Apex的认证方案是全局生效的,直接修改页面流程中的登录调用无法绕过全局认证逻辑。通过包装函数根据APP_PAGE_ID做分支,相当于在全局认证入口处做了逻辑分发,实现不同登录页对应不同用户表的认证效果。


内容的提问来源于stack exchange,提问作者ThomasT

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 11:25:10