2012-07-03 3 views
1

У меня есть платежный шлюз, интегрированный на моем сайте. Когда пользователь выполнен с оплатой, он перенаправляется на определенную страницу, например: www.example.com/redirect. Я хочу запретить пользователям напрямую вводить этот URL-адрес (www.example.com/redirect) в адресной строке и получить доступ к странице. Я хочу, чтобы это как можно скорее.Предотвращение прямого доступа к странице в Joomla

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

ответ

1

Трудно точно ответить, так как вы только дать не-JOOMLA URL в качестве примера, но в верхней части каждого скрипта Joomla является следующая строка:

defined('_JEXEC') or die('Restricted access'); 

Вы, очевидно, не может запретить пользователю набрав URL-адрес, так что это, по крайней мере, обнаружит, что сеанс уже на месте. Если пользователь не находится в активном сеансе Joomla, это приведет к срабатыванию и предотвращению доступа. Вы можете легко адаптировать его, чтобы делать все, что хотите, для своего требования, в зависимости от того, что вам нужно проверить, т. Е. Если реферер является вашим платежным шлюзом и т. Д.

+0

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

0

У меня было подобное желание. Я хотел, чтобы страница отображалась только в том случае, если пользователи вошли в систему и заполнили страницу ввода заказа.

Что я решил сделать, это проверить, есть ли данные в POST.

контроллер/place_order.php (snipet)

public function submitOrder() 
{ 
    $post = JRequest::get('post'); 
    $model = $this->getModel(); 
    if($post != null && $post != ''){ 
     if($model->placeOrder()){ 
     } 
    } 
    JRequest::setVar('layout', 'submitOrder'); 
    parent::display(); 
} 

Это предотвращает задачу от выполнения моей placeOder функции ничего в модели. Затем я просто добавляю что-то похожее на страницу отправки заявки. В вашем случае «перенаправить».

вид/place_order/TMPL/submitOrder.php (snipet)

defined('_JEXEC') or die('Restricted access'); 

$user =& JFactory::getUser(); 

if ($user->guest) { 
echo "<p>You must login to access this page.</p>"; 
} 
else if($_POST == "" || $_POST == null){ 
    echo "<p>You can not directly access this page.</p>"; 
}else { 
//Your order was submitted successfully HTML (don't forget to close it at the bottom ;) 

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

Вы также можете проверить эту страницу из Joomla on authorization and privileges.

0

это должно быть сделано в базовом контроллере вашего компонента (controller.php). если вы посмотрите на этот фрагмент кода:

// Check for edit form. 
if ($vName == 'form' && !$this->checkEditId('com_weblinks.edit.weblink', $id)) 
{ 
    // Somehow the person just went to the form - we don't allow that. 
    return JError::raiseError(403, 
    JText::sprintf('JLIB_APPLICATION_ERROR_UNHELD_ID', $id)); 
} 

этот блок кода присутствует в большинстве основных компонентов, предназначенных делать именно то, что вы хотите. как бы то ни было, как это фактически дозирует то, что он делает, объясняется с помощью функции $this->checkEditId(). Надеюсь, вы знакомы с классом JControllerForm, и если вы не просматриваете API. потому что создание идентификатора редактирования для страницы и «авторизация пользователя для доступа к определенной странице на основе его последней страницы» выполняется JControllerForm.

Смежные вопросы