Как изменить базовый URL /auth/register ?

#1 27 ноября 2014 в 09:27
Проект требует предоставлять пользователю возможность регистрации на сайте только после просмотра вебинара.
Поэтому на сайте из меню и виджетов ссылки на регистрацию удалены, а единственная активная ссылка отображается в конце вебинара.

Возникла задача: изменить базовый URL /auth/register чтобы закрыть возможность попасть на страницу регистрации, простым вбиванием стандартного пути.

Заранее благодарен за решение.
#2 27 ноября 2014 в 11:09

Возникла задача: изменить базовый URL /auth/register чтобы закрыть возможность попасть на страницу регистрации, простым вбиванием стандартного пути.

Rost
просто изменив адрес, возможность попасть на страницу регистрации вы не закроете!

Как в icms 2.x изменить адрес компонента (auth) читайте здесь
#3 27 ноября 2014 в 11:18


Возникла задача: изменить базовый URL /auth/register чтобы закрыть возможность попасть на страницу регистрации, простым вбиванием стандартного пути.

Rost
просто изменив адрес, возможность попасть на страницу регистрации вы не закроете!

Как в icms 2.x изменить адрес компонента (auth) читайте здесь

Val

1. remap, к сожалению, в данном случае не работает (возможно только у меня) sad
2. проблема в том и состоит, что регистрацию закрывать и не надо — она должна быть доступна всем, НО после просмотра вебинара. Однако если юзер знаком с Инстантом, то простой набор /auth/register выведет его на регистрацию. Хотелось бы закрыть "дыру" ))
#4 27 ноября 2014 в 11:30
странно, конечно, что ремап не работает(( Я вечером у себя на локалке попробую… но теоретически должно было помочь…
Опять же, если пользователь знаком с Инстантом то даже если мы поменяем с помощью ремапа адрес компонента авторизации, его легко "подсмотреть" при попытке залогинеться (или точнее посмотреть адрес ссылки на авторизацию).

Может попробовать жестко в движке поменять название самого файла-экшена регистрации?
#5 27 ноября 2014 в 11:40


странно, конечно, что ремап не работает(( Я вечером у себя на локалке попробую… но теоретически должно было помочь…
Опять же, если пользователь знаком с Инстантом то даже если мы поменяем с помощью ремапа адрес компонента авторизации, его легко "подсмотреть" при попытке залогинеться (или точнее посмотреть адрес ссылки на авторизацию).

Может попробовать жестко в движке поменять название самого файла-экшена регистрации?

Val

1. Val, буду очень благодарен, если Вы протестите remap по этому вопросу ))
2. "подсмотреть" при попытке залогиниться юзер видит /auth/login, как я понимаю
3. А вот "попробовать жестко в движке поменять название самого файла-экшена регистрации" — это уже интересно smile

Val, спасибо за внимание и поддержку => уже плюсанул в знак благодарности ))
#6 27 ноября 2014 в 12:26
remap меняет только /auth/register, а вот register нет. Если сменить только auth, то Val прав — залогинивание покажет изменённый путь к register.
"register" зашит где-то в dataset_name (наверное)…
#7 27 ноября 2014 в 12:31
Если регистрация нужна только после совершения каких-либо действий, то как минимум нужна проверка на эти самое действие. Следовательно во-первых нужно ввести проверку на рефферер и если попадание на /login не с целевой страницы, то выкидывать туда пользователя принудительно (ну или показывать сообщеньку, не важно), а во-вторых на целевой странице обязательно должен быть какой-нить управляемый ява скриптом чекбокс, нажатие на который будет подтверждать готовность к регистрации… Иначе все это пустая трата времени ИМХО.
#8 27 ноября 2014 в 12:59


Если регистрация нужна только ...

Pasha

Логика действий юзера проста: он просматривает целевую страницу ---> Если ему интересно предложение, то он заполняет форму для получения ссылки на вебинар на свой e-mail ---> Попадая на вебинар юзер в конце получает ссылку для регистрации на сайте, где сможет скачать ценную инфу и файлы.

Согласен, что можно развернуть целый комплекс проверок и контроля пошаговых действий юзера, но мне показалось, что изменение даже пары символов в адресе register решит задачу

Возможно это параноя, опасаться, что появится знаток ICMS 2, который зарегистрируется вбив прямой адрес /auth/register. И если предполагать, что число таких знатоков попавших на сайт будет ничтожно малым, то конечно тему можно и закрыть…

Но думаю, что решение данной задачи будет актуальным ещё для многих других создателей проектов на Инстанте.
#9 27 ноября 2014 в 18:27
Для такой задачи изменять урл смысла нет, на мой вгляд.
Как правильно сказал Pasha, нужно проверять выполнение необходимых условий и потом либо пускать в регистрацию, либо выдавать пояснение о невозможности регистрации без просмотра семинара и перенаправлять на страницу с семинаром. Признак выполнения условия можно выставлять в куках или в сессии после просмотра семинара. А для проверки условия сделать маленький хак в компоненте auth — добавить строку для вызова хука auth_register_start (или каким-то подобным именем), чтобы он срабатывал при открытии страницы с регистрацией. Тогда можно будет стандартным для Двойки способом — через обработку хуков — проверять условие в своём файле, обрабатывающем этот хук. При обновлении CMS достаточно будет только внести заново эту строку с вызовом хука в auth и всё опять заработает. Может быть даже разработчики согласятся добавить этот хук в будущих версиях при наличии достаточного количества желающих пользователей.
#10 27 ноября 2014 в 20:20
Rost, проверил работоспособность ремапа — и он работает! Но получается, что требуемое действие (не только с регистрацией, а в целом по любому компоненту) доступно/работает и по новому адресу и по старому. Т.е. если мы меняем /auth/register на /opana/register, то экшен register доступен в любом из двух описанных случаях (что по условиям нам не подходит=) ).

В указанных вами рамках можно сделать следующее:
1. как я писал ранее — переименовать экшен register на что-то другое, например registerim или secret_action и др.
для этого нужно переименовать файл ..\system\controllers\auth\actions\register.php в, соответственно ..\system\controllers\auth\actions\registerim.php. Далее в самом файле меняем "class actionAuthRegister extends cmsAction" на "class actionAuthRegisterim extends cmsAction" (или, если у нас было secret_action, то "class actionAuthSecretAction extends cmsAction", смысл надеюсь понятен). И последнее в шаблоне регистрации, также нужно указать новый URL — ..\templates\default\controllers\auth\registration.tpl.php — меняем в 16-ой строке
'action' => href_to('auth', 'registerim'), // или 'action' => href_to('auth', 'secret_action') =)
  1. <?php
  2. $this->renderForm($form, $user, array(
  3. 'action' => href_to('auth', 'registerim'),
  4. 'method' => 'post',
  5. 'append_html' => $captcha_html.'<p>текст</p>',
  6. 'submit' => array(
  7. 'title' => LANG_CONTINUE
  8. )
  9. ), $errors);
  10. ?>
всё! теперь новый адрес ссылки регистрации — sitename.ru/auth/registerim

2. Ввести в URL дополнительный параметр — секретный ключ! =))) чтобы ссылка работала например так /auth/register/s!F3b_jwx5zQ
для этого в файле экшена ..\system\controllers\auth\actions\register.php между 3-е1 и 6-ой строкой вставляем следующее:
  1. ...
  2. public function run($secretKey=false){
  3.  
  4. if (!$secretKey) {cmsCore::error404();}
  5. if ($secretKey!=='s!F3b_jwx5zQ') {cmsCore::error404();}
  6. ...
и в файле шаблона указываем правильный URL (..\templates\default\controllers\auth\registration.tpl.php):
так же как написано чуть выше, в renderForm вставляем 'action' => href_to('auth', 'register', 's!F3b_jwx5zQ'),

3. Возможно стоит пересмотреть задачу и решить ее с помощью стандартного механизма выдачи инвайтов для регистрации ???
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.