Есть ли способ в Oracle Apex для проверки электронной почты для регистрации пользователей - PullRequest
0 голосов
/ 29 января 2019

Я устанавливаю приложение Oracle Apex с апексом 18.2.

Я хочу внедрить процесс регистрации пользователя с помощью проверки электронной почты, например, если пользователь зарегистрируется из приложения, система сгенерирует электронное письмо со ссылкой для проверки, и если пользователь щелкнет ссылку, пользователь будет зарегистрирован для входа в приложение.

Ответы [ 2 ]

0 голосов
/ 30 января 2019

Шаг 1) создать проверку для элемента позвольте предположим, что P1_EMAIL.

ШАГ 2) ВЫБЕРИТЕ ПУНКТ СООТВЕТСТВУЕТ РЕГУЛЯРНОМУ ВЫРАЖЕНИЮ В РАЗДЕЛЕ ВАЛИДАЦИИ. ВЫСТАВЬТЕ ЭТОТ КОД В РЕГУЛЯРНОМ ВЫРАЖЕНИИ:

/^[a-z][a-zA-Z0-9_]*(\.[a-zA-Z][a-zA-Z0-9_]*)?@[a-z][a-zA-Z-0-9]*\.[a-z]+(\.[a-z]+)?$/
0 голосов
/ 30 января 2019

Не уверен, что Oracle поддерживает это "из коробки", но вы всегда можете создать собственный процесс для этого.

Вам, вероятно, понадобятся пользовательская функция аутентификации, пользовательские пользователи и таблица непроверенных пользователей.Что-то вроде:

-- This table stores user information.
create table users_tbl ( 
  id number generated always as identity
, username varchar2(30)
, password varchar2(100)
, email_address varchar2(100)
-- etc
);

-- This table stores temporary/unverified user data.
create table unverified_users_tbl ( 
  id number generated always as identity
, username varchar2(30)
, password varchar2(100)
, email_address varchar2(100)
, verification_code varchar2(100) -- you can use sys_guid() function to generate code. also make this unique.
, expiration_date date -- you can set when the verification_code expires
, verified_flag varchar2(1) -- Y/N
-- etc
);

Затем создайте общедоступную форму страницы для регистрации пользователя, которая вставляет данные в пользовательский файл unverified_users_tbl и отправляет электронное письмо со ссылкой для подтверждения.Вероятно, лучше использовать процедуру, чтобы сделать оба.Примерно так:

Давайте предположим следующее:

Страница 1 -> Страница регистрации (общедоступная) - имеет все необходимые поля для регистрации пользователя.

Страница 2 -> Проверкастраница (общедоступная) - имеет поле P2_VERIFICATION_CODE - имеет страницу «При загрузке» для проверки кода.

Вот несколько идей для процедур:

create procedure register ( p_username in varchar2
                          , p_password in varchar2
                          , p_email_address in varchar2 )
is
  l_verification_code varchar2(100);
  l_subject varchar2(100);
  l_message varchar2(4000);
begin
  insert
    into unverified_users_tbl ( username
                              , password
                              , verification_code
                              , expiration_date )
  values ( p_username
         , encrypt(p_password) -- encrypt password here.
         , sys_guid()
         , sysdate + 1 -- expires after 24 hours )
  returning verification_code 
    into l_verification_code;

  l_subject := 'Verify your account';
  l_message := 'Verify your account by clicking this link. http://your-apex-url/' || apex_util.prepare_url( p_url => 'f?p=YOU_APP_ID:2:::NO::P2_VERIFICATION_CODE:' || l_verification_code );

  -- call your send mail procedure/function here.
  send_mail ( p_email_address, p_subject, p_message );
end;
/

Затем на вашей странице 2 (Страница подтверждения).), выполните PL / SQL в процессе загрузки страницы.Что-то вроде:

begin
  if ( verify_code ( :P2_VERIFICATION_CODE ) = true ) then
    -- display verified message
  else
    -- display error message
  end if;
end;
/

-- returns true if verified otherwise returns false
create function verify_code ( p_verification_code ) return boolean
is
begin
  -- check if code exists and not expired.
  update unverified_users_tbl
     set verified_flag = 'Y'
   where verification_code = p_verification_code
     and expiration_date >= sysdate;

  -- sql%rowcount will return the number of records affected in the update statement above.
  -- should not return more than 1 otherwise something went wrong here.
  if ( sql%rowcount = 1 ) then
    -- we're here because we successfully verified the code
    -- copy the record to the users_tbl
    insert
      into users_tbl ( username
                     , password
                     , email_address
                     -- etc
                     )
    select username
         , password
         , email_address
         -- etc
      from unverified_users_tbl
     where verification_code = p_verification_code;

    commit;

    return true;

  else
    -- we're here because the verification_code is either invalid or expired.
    return false;
  end if;

end;
/

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

Вы можете обратиться к this для пользовательской аутентификации.

Hopeэто помогает.

...