Добавление еще одного параметра на странице входа в систему Oracle Apex - PullRequest
0 голосов
/ 18 марта 2019

Я хочу добавить еще один параметр на странице входа, который возвращает team_id, но я не могу аутентифицировать пользователя.Ниже приведена функция по умолчанию из схем Oracle Apex Authentication, где я добавил p_team в качестве параметра in.

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'

Ответы [ 2 ]

0 голосов
/ 19 марта 2019

Если вы определили Схему аутентификации типа схемы «Пользовательская», вы заметите следующее во встроенной справке «Имя функции аутентификации».

Эта функция должна возвращать логическое значение для процедуры входа в систему, которая вызываетЭто.Он имеет 2 входных параметра 'p_username' и 'p_password', которые можно использовать для доступа к значениям, введенным конечным пользователем на странице входа в систему.

Определение apex_authentication.login делаетне соответствует вашей попытке - вы не вызывали свою собственную функцию.

Действительно ли модель безопасности должна принимать «команду»?Это жизненно важно для установления личности или что-то, что может быть назначено после входа в систему?

Что касается upper(pass), то, хотя это может быть и не «окончательный код», это показывает, что вы начинаете задом наперед - пароли в виде открытого текста даже не должен его набирать, ИМХО.

0 голосов
/ 18 марта 2019

Здесь вы можете использовать пользовательскую функцию аутентификации:

Общие компоненты / Схемы аутентификации / (выберите свой текущий) / настройки / Имя функции аутентификации

И оставьте нормальный код апекса в покое. Обратите внимание, что ваша пользовательская функция аутентификации должна возвращать логическое значение (true или false).

...