2010-10-13 3 views
0

Nous avons un site qui doit avoir plusieurs sections à sécuriser. Nous avons notre certificat SSL installé, et pour les zones qui sont accessibles via l'élément de menu, ce n'est pas un problème - nous utilisons simplement le paramètre SSL Enabled système dans l'éditeur d'élément de menu. Mais nous avons quelques sections (c.-à-un écran panier de commande) qui ne sont accessibles via un bouton soumettre (ils n'ont pas leur propre URL, pour ainsi dire - ils sont juste soumis à eux-mêmes via le contrôleur et la vue des changements basés sur l'action de forme) en ce moment, l'action de forme est définie comme ceci:.Comment utiliser SSL/https avec des éléments non-menu?

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

où le segment est passé par le view.html.php. La balise de formulaire rendu ressemble à ceci:

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

Lorsque soumis, le contrôleur saisit la valeur de quelques soumis champs et détermine quelle vue afficher (connecté avec sauvé informations de compte ou d'une transaction anonyme) puis affiche le bon formulaire .

Voici une version allégée de la méthode d'affichage du contrôleur:

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 

Comment puis-je faire en sorte que le point de vue qui obtient affiché se commutée vers une URL https? Je l'ai déjà posté sur le forum de discussion google joomla dev, et j'ai reçu une réponse me disant d'utiliser JRoute pour générer une URL et utiliser setRedirect au lieu de poster sur le formulaire, mais quelqu'un d'autre a répondu que JRoute produisait une toute nouvelle requête, donc tout votre accès au contenu de type JRequest :: getVar est parti. Nous devons être en mesure d'accéder aux variables qui sont affichées via le formulaire, de sorte que la solution est hors. Est-ce que quelqu'un a d'autres façons de le faire? Je suis assez nouveau dans le développement de Joomla et je ne suis pas familier avec la plupart des objets et des méthodes disponibles.

+0

Quelle extension du panier utilisez-vous? –

+0

Un nous nous sommes construits. J'ai compris cela; postera la réponse quand j'aurai quelques minutes. – EmmyS

Répondre

0

J'ai entendu dire par certaines personnes que JRoute serait meilleur pour cela, mais cela ne fonctionne que si vous connaissez l'URL dont vous avez besoin; nous devons construire notre URL dynamiquement en fonction de la requête en cours, j'ai donc utilisé JURI.

Dans mon view.html.php, j'ai ajouté ce code:

$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() est une fonction dans mon modèle qui tire une valeur à partir d'une table de base de données et retourne une valeur booléenne. Donc, si needSecure renvoie true, nous obtenons l'URI de la requête en cours, définissons la première partie sur https, puis ajoutons le bit que nous soumettons. Si elle renvoie false, nous définissons simplement le bit à soumettre.

Par défaut.php, nous avons ceci:

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

Si needSecure est vrai, l'action rend à

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

sinon il rend à

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

Il fonctionne parfaitement, et parce que nous nous stockons le booléen dans une base de données, cela signifie que nous n'avons jamais besoin de changer le code lui-même si nous voulons rendre une nouvelle soumission de formulaire sécurisée ou non sécurisée.

Questions connexes