Oracle Apex - срок действия пароля истекает после установленной даты на основе проверки таблицы и логина - PullRequest
1 голос
/ 14 октября 2019

Я верю, что ты в порядке. Вот разбивка того, что я получил до сих пор. У меня есть:

  • Пользовательская схема аутентификации, ссылающаяся на имя пользователя и пароль из таблицы. (работает)

Я добавил столбец expire_password, в котором я хотел бы установить триггер или функцию (точно не знаю, как это сделать), которая выполнит проверку на странице входа, чтобы проверить,срок действия учетной записи пользователя истек. Если срок действия истекает, вы переходите прямо на страницу «Смена пароля», где пользователь вводит новый пароль и может войти в систему. Когда новый пароль добавлен, сбросьте таймер, чтобы снова истечь пароль после установленной даты автоматически.

Я бы очень признателен за помощь.

Заранее спасибо

Thembani

Ответы [ 2 ]

1 голос
/ 14 октября 2019

Поскольку все выполнено на заказ, вот один из вариантов.

  • создать задание базы данных (используя DBMS_JOB или DBMS_SCHEDULER), которое будет вызывать процедуру, которая - ежедневно проверяет - проверяетистекает ли чей-то пароль в течение следующих нескольких дней. Если это так, отправьте им электронное письмо (используя UTL_MAIL или UTL_SMTP), сказав, что они должны сменить пароль
  • . Процедура пользовательской регистрации проверяет, больше ли sysdate, чем срок действия пароля. Если это так, он вернет false (т.е. не позволит успешно завершить процедуру входа в систему и отклонит попытку входа в систему)

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

  • создать (сохраненную) функцию, которая проверяет, истек ли чей-то пароль (пусть он возвращает Boolean и вызывает его f_pwd_exp), например,

    function f_pwd_exp (par_app_user)
      return boolean
    is
      l_exp_date date;
    begin
      select exp_date
        into l_exp_date
        from your_users_table
        where username = par_app_user;
    
      return l_exp_date > trunc(sysdate);
    end;
    
  • на начальной странице приложения, создайте ветвь Before Header , которую

    • перенаправляет на страницу «смена пароля»
    • имеет состояние на стороне сервераустановлен на «PL / SQL Function Body» и выглядит как

      return f_pwd_exp(:APP_USER); 
      

      , что означает, что - если срок действия пароля истек, функция вернет True, а ветвь сработает и перенаправит пользователя на страницукоторый используется для смены пароля


Теперь у вас есть два способа сделать это;используйте любой из них, их комбинацию или создайте свой собственный. Удачи!

0 голосов
/ 15 октября 2019

@ littlefoot Уже рассмотрены основы. Одна вещь, которую я добавлю, состоит в том, что вы не должны хранить пароли в открытом виде, они должны быть хешированы и желательно с уникальной солью, сгенерированной для каждого пароля. У Дуга Голта недавно была похожая запись: https://blogs.oracle.com/apex/custom-authentication-and-authorization-using-built-in-apex-access-control-a-how-to

Надеюсь, вы уже делаете что-то подобное ...

Вот пример процесса приложения из старого приложения, где я реализовал этофункциональность.

declare

  l_users_rec users%rowtype;

begin

  if :app_page_id != '101' --login
  then
    select *
    into l_users_rec
    from users
    where upper(email) = upper(:APP_USER);

    if l_users_rec.change_password_flag = 'Y' and :app_page_id != '110' --profile
    then
      wwv_flow.g_unrecoverable_error := true;
      owa_util.redirect_url('f?p=' || :APP_ID || ':110:' || :APP_SESSION);
    end if;
  end if;

end;

Некоторые API изменены. Начните со старых, а затем протестируйте новые:

  1. apex_application.stop_apex_engine (вместо wwv_flow.g_unrecoverable_error)
  2. apex_util.redirect_url (вместо owa_util.redirect_url)
...