2010-10-09 32 views
0

J'ai un site Web CakePHP qui fonctionne très bien.L'authentification de CakePHP ne fonctionne pas en production, mais fonctionne en test

Je viens de développer une nouvelle fonctionnalité qui, à un moment donné, connecte automatiquement l'utilisateur et le redirige vers une page située derrière le mur de connexion.

Cela fonctionne parfaitement bien dans ma machine dev, mais en production, l'utilisateur est redirigé vers la page de connexion.

Code pertinent: (pas beaucoup)

$objCustomer = $this->Customer->findById($customerId); 
    $this->Auth->login($objCustomer); 
    $this->redirect("/customers/signup"); 

client est le modèle qui est utilisé pour l'authentification.

Dans le serveur, je vois que je reçois redirigée vers/clients/inscription, et qui me redirige vers/clients/login

Ce qui me confond le plus est que cela fonctionne parfaitement dans ma machine.

I la valeur déversée retour de Auth-> Connectez-vous sur le serveur, et il retourne 1, donc en théorie tout va bien et que l'utilisateur devrait avoir été connecté.

Certaines choses que je peux penser que sont différents entre ma machine et le serveur:

  • La machine Dev est Windows, le serveur est Linux. Cela introduit parfois des problèmes de sensibilité à la casse, mais la méthode d'inscription que je redirige est tout en minuscules, je ne vois pas où il pourrait y avoir un tel problème ici.
  • La machine Dev est IIS, le serveur LiteSpeed. Peut-être que Litespeed est en train de baiser avec quelque chose? Ce serait la première fois depuis plus d'un an à faire tourner ce site en production que je trouverais quelque chose de différent à cause de LiteSpeed ​​
  • Le site de production est sur SSL, le dev n'est pas. Je ne vois pas comment cela pourrait être un problème.

Toutes les idées sont infiniment les bienvenus!

Merci!

+1

Le site de production est-il servi _entirely_ sur SSL? On m'a dit que parfois les sessions se rompent lors du passage de/vers SSL. –

+0

Point intéressant ... Il existe un formulaire HTTPS dans le site "A", qui publie des données dans une URL HTTPS dans le site "B" (où CakePHP est).Le traitement de cette requête, qui est sur HTTPS, fait la connexion automatique, et redirige vers une autre URL, qui est également sur HTTPS (en fait, il ne spécifie pas de protocole pour la redirection) –

+1

Alors oui, tout se passe sur SSL, * * cependant **, il n'y a jamais une page rendue et envoyée au client depuis le site en question, donc ça peut être un problème de cookies, peut-être? Si c'est le cas, cependant, la question est de savoir pourquoi cela fonctionnerait sur HTTP, et pas sur HTTPs –

Répondre

0

Après un processus Loooong d'essayer différentes choses étranges, il se trouve tout cela se résume à ceci:

ini_set('session.referer_check', $this->host); 

Cela fait partie des caractéristiques de sécurité standard de CakePHP ... Il définit ce paramètre INI. Si la requête faite à l'action qui appellera Auth-> login provient d'un autre hôte (domaine/sous-domaine/quelquechose), PHP considérera la session invalide, ce qui annulera la tentative de connexion automatique.

0

J'ai eu aussi des problèmes avec l'authentification fonctionnant correctement sur ma machine en mode développement, mais ne fonctionnant pas sur le serveur en mode production. Étonnamment, lorsque j'ai changé le serveur en mode développement, il a commencé à fonctionner correctement. Puis je suis revenu à la production, et ça fonctionnait toujours. Peut-être que c'était un problème de cache.

+0

Merci pour votre réponse. Quand vous dites "mode de développement", voulez-vous dire cela? Configure :: write ('debug', 2); - Si c'est le cas, je viens de l'essayer et malheureusement ça n'a pas marché. Il ne serait toujours pas auto-login même avec debug = 2. –

+0

Oui, c'est exactement ce que je voulais dire. Est-ce la seule partie où l'authentification échoue, ou l'authentification ne fonctionne-t-elle pas en général? –

+0

Tout fonctionne dans le serveur de production, sauf pour cela. Et c'est la seule partie où je "forcer" un login, j'envoie normalement l'utilisateur à la page de connexion et laisse CakePHP le gérer. Alors oui, c'est la seule chose qui échoue. –