2010-12-09 44 views
0

J'utilise Codeigniter avec la bibliothèque TankAuth installée et j'essaie de télécharger vers index.php/requests/doUpload à partir de swfupload mais je ne peux pas accéder à la page comme authentifiée. J'ai lu beaucoup de messages autour du filet sur le même problème et j'ai essayé de mettre $config['sess_match_useragent'] = FALSE; mais toujours pas de différence. J'ai fini par sauter la vérification de connexion dans mon contrôleur à des fins de test. Mais maintenant j'ai besoin d'accéder à la bibliothèque tankAuth à partir de mon contrôleur pour obtenir l'ID utilisateur actuellement connecté. Il est demandé dans mon application et ne peut pas l'ignorer, j'ai vraiment besoin de passer l'identifiant de l'utilisateur connecté à ce modèle doUpload. Je contrôleur de configuration comme ceci:Codeigniter + TankAuth + Swfupload impossible d'obtenir l'ID de l'utilisateur de l'enregistreur

function doUploadFileFn() { 
     if (!$this->tank_auth->is_logged_in()) { 
      return; 
     } else { 
      $user_id = $this->tank_auth->get_user_id(); 
      $this->load->model('requests/doUploadFile'); 
      $this->doUploadFile->uploadData($user_id); 
      } 

    } 

Maintenant, il ne passe pas le is_logged_in() vérifier, comme je l'ai appris d'autres postes, CI supprime la session, mais je configurer la configuration de ne pas correspondre à l'agent utilisateur, mais ne fonctionne toujours pas.

Existe-t-il une solution à ce problème?

Répondre

2

Après le tutoriel dans le CI forums, j'ai été en mesure de réaliser ce que vous demandez.
1) Mettre cela dans la configuration SWFUpload JS:

post_params: {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"}, 

2) et placer le fichier dans votre dossier MY_Session.phpapplication/libraries/.

3) La nouvelle bibliothèque doit être chargée au moment où la vue est chargée sinon (pour une raison quelconque) puis charger votre bibliothèque dans le contrôleur.

PS: Vous devez définir:

$config['sess_match_useragent'] = FALSE; 

Sinon, une nouvelle session sera créée pour un useragent Shockwave Flash

EDIT: D'accord, en fonction de votre comment..you vraiment besoin de mettre votre post_params paramètre à votre session actuelle afin qu'il puisse être envoyé lorsque le flash post à votre contrôleur, maintenant dans votre cas, la meilleure chose que je pouvais penser est la suivante:
Votre externalUntouchableJsFile.js:

// JS scripts... 
... 
var swfu = new SWFUpload({ 
    ... 
    ... 
    post_params: GLOBAL_VAR, 
    ... 
}); 
    ... 
// rest of your JS 

Et dans votre vue PHP et avant de charger ce fichier JS quelque chose comme:

<script> 
var GLOBAL_VAR = {}; 
<?php if(session_is_there) { ?> 
GLOBAL_VAR = {"<?php echo $this->config->item('sess_cookie_name'); ?>" :"<?php echo $this->session->get_cookie_data(); ?>"} 
<?php } ?> 
</script> 
<script type="text/javascript" src="<?php echo base_url() ?>path/to/js/externalUntouchableJsFile.js"></script> 

EDIT 2: Puisque vous utilisez un fichier externe, vous pouvez oublier de définir la variable globale donc utiliser:

post_params: (typeof GLOBAL_VAR === 'undefined') ? {}:GLOBAL_VAR, 
+0

J'ai déjà cette config, seulement que je ne peux pas passer les params comme ça parce que j'utilise un fichier JS pour lancer le script et pas les fichiers PHP. Je ne peux pas faire apparaître les variables comme ça. Seulement si je voudrais utiliser un fichier PHP avec en-tête JS, juste pour cela, mais je ne preffer cette méthode. Merci. –

+0

Merci pour l'effort. Cela marche. –

+0

Heureux que ça a aidé! :-) – ifaour

0

Il convient de mentionner que le fichier Flash doit être servi à partir du même domaine que votre site CI ou qu'il ne sera pas en mesure de lire les cookies de l'autre. Assurez-vous également que le chemin du cookie de connexion est défini sur le chemin racine. Si SWFUpload ne peut pas lire le cookie de connexion, il ne peut pas l'envoyer non plus.

Flash a un accès limité aux cookies de session, as documented here in the SWFUpload forum. Est-il possible que vous ayez défini la connexion automatique pour éviter de définir une expiration (dans config/tank_auth.php), ce qui en fait un cookie de session? Si tel est le cas, le fichier SWF SWFUpload peut ne pas être en mesure d'accéder ou d'envoyer la valeur du cookie autologin, en fonction de la version de Flash Player sur l'ordinateur. Vérifiez vos valeurs d'expiration de cookie en utilisant un outil de débogage comme Firebug pour voir si c'est le cas. Si le téléchargement fonctionne lorsque vous cochez une case "Mémoriser" mais pas autrement, cela indique un problème de cookie de session. Pour forcer le fichier SWF à transmettre la valeur de cookie TankAuth lors du téléchargement de fichiers, vous pouvez d'abord surcharger la fonction cookie helper get_cookie pour rechercher dans le tableau $ _COOKIE ou le tableau $ _POST pour les valeurs. Ensuite, il apparaît que with SWFUpload v2 you can send additional POST values along with the upload, et ce serait le moyen d'envoyer la clé autologin, ce qui permettrait alors à votre contrôleur d'obtenir le user_id. Mais avant de pirater l'assistant Cookie, assurez-vous que vos pièces mobiles fonctionnent en premier, comme décrit dans le premier paragraphe.

0

J'ai réussi à appliquer une solution grossière pour cela en passant l'ID utilisateur connecté dans l'URL, et de le faire à partir Javasc ript avec des fonctions URL. C'est la meilleure méthode sur laquelle je peux compter en ce moment, ça ne me dérange pas trop que l'ID utilisateur soit visible parce que j'utilise un iframe géré pour afficher cette partie spécifique de l'application et que l'application est réservée à l'usage interne de l'entreprise .

Merci pour vos réponses.