Как использовать SSL/https с элементами, не входящими в меню?

У нас есть сайт, который должен иметь несколько разделов для обеспечения безопасности. У нас установлен наш SSL-сертификат, и для областей, доступных через пункт меню, это не проблема — мы просто используем системный параметр SSL Enabled в редакторе пунктов меню. Но у нас есть несколько разделов (например, экран проверки корзины покупок), которые доступны только через кнопку отправки (у них, так сказать, нет собственного URL-адреса - они просто отправляются сами себе через контроллер, и вид изменяется на основе действия формы.) Прямо сейчас действие формы установлено следующим образом:

<form name="instantForm" action="/<?=$this->segment?>/" method="post" onsubmit="updateSubmitValue()">

где сегмент передается через view.html.php. Тег отображаемой формы выглядит следующим образом:

<form id = "checkoutForm" name="checkoutForm" action="/checkout/" method="post" onsubmit="updateSubmit()">

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

Вот урезанная версия метода отображения контроллера:

if (JRequest::getVar('checkoutCodeSubmitBTN') != ""){
   //user has clicked Checkout button; go to billing info page
   JRequest::setVar('view','checkoutpay');
   // JRequest::setVar('view','checkout_thankyou');

   //reference view
   $viewCode =& $this->getView('checkoutpay','html');
   $viewCode->voucher =& $voucher;
} //close test for step 1 if

Как я могу убедиться, что отображаемое представление переключается на URL-адрес https?

Я уже разместил это в дискуссионной группе google joomla dev и получил ответ, в котором говорилось, что мне нужно использовать JRoute для создания URL-адреса и использовать setRedirect вместо публикации в форме, но затем кто-то еще ответил, что использование JRoute создает совершенно новый запрос , так что весь ваш доступ к материалам типа JRequest::getVar исчез. Нам нужно иметь доступ к переменным, которые публикуются через форму, чтобы это решение не было найдено. Есть ли у кого-нибудь другие способы сделать это? Я новичок в разработке Joomla и не знаком со многими доступными объектами и методами.


person EmmyS    schedule 13.10.2010    source источник
comment
Какое расширение корзины вы используете?   -  person Brent Friar    schedule 14.10.2010
comment
Тот, который мы построили сами. Я понял это; опубликую ответ, когда у меня будет несколько минут.   -  person EmmyS    schedule 14.10.2010


Ответы (1)


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

В моем view.html.php я добавил этот код:

$needSecure = $model->needSecure();
    if($needSecure) {
        $u =& JURI::getInstance( JURI::base() );
        $u->setScheme( 'https' );
        $tmpURL =  $u->toString()."checkout";
    }
    else {
        $tmpURL = "/checkout";
    }
$this->assignRef("tmpURL", $tmpURL);

needSecure() — это функция в моей модели, которая извлекает значение из таблицы базы данных и возвращает логическое значение. Поэтому, если needSecure возвращает true, мы получаем текущий URI запроса, устанавливаем первую часть на https, а затем добавляем бит, на который мы отправляемся. Если он возвращает false, мы просто устанавливаем бит для отправки.

В default.php у нас есть это:

<form id = "checkoutForm" name="checkoutForm" action="<?=$this->tmpURL?>/" method="post" onsubmit="updateSubmit()">

Если needSecure имеет значение true, действие отображается в

<form id = "checkoutForm" name="checkoutForm" action="https://www.mysite.com/checkout" method="post" onsubmit="updateSubmit()">

в противном случае это приводит к

<form id = "checkoutForm" name="checkoutForm" action="/checkout" method="post" onsubmit="updateSubmit()">

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

person EmmyS    schedule 14.10.2010