Как использовать SSL / https с элементами не из меню? - PullRequest
0 голосов
/ 14 октября 2010

У нас есть сайт, который должен иметь несколько разделов для обеспечения безопасности. У нас есть наш сертификат SSL установлен, и для областей, которые доступны через пункт меню, это не проблема - мы просто используем систему с поддержкой SSL Параметр в редакторе пунктов меню. Но у нас есть несколько разделов (т.е. экран проверки корзины покупок), которые доступны только через отправку кнопка (у них нет своего 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

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

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

1 Ответ

0 голосов
/ 14 октября 2010

Я слышал от некоторых людей, что 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 () isфункция в моей модели, которая извлекает значение из таблицы базы данных и возвращает логическое значение.Поэтому, если 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()">

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

...