2010-12-09 5 views
0

Ich verwende Codeigniter mit der TankAuth-Bibliothek, die installiert wurde, und versucht, von swfupload nach index.php/requests/doUpload zu laden, kann aber nicht authentifiziert auf die Seite zugreifen. Ich habe viele Posts rund um das Netz über ähnliche Probleme gelesen und versucht, $config['sess_match_useragent'] = FALSE; einzustellen, aber immer noch keinen Unterschied. Ich habe die Login-Prüfung in meinem Controller zu Testzwecken übersprungen. Aber jetzt muss ich von meinem Controller auf die tankAuth-Bibliothek zugreifen, um die aktuell angemeldete Benutzer-ID abzurufen. Es ist in meiner Anwendung angefordert und kann es nicht überspringen, ich muss die angemeldete Benutzer-ID wirklich an dieses DoUpload-Modell übergeben. Ich habe Setup-Controller wie folgt aus:Codeigniter + TankAuth + Swfupload kann die Logger-Benutzer-ID nicht abrufen

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); 
      } 

    } 

Nun, ist es nicht die is_logged_in() übergeben überprüfen, wie ich aus anderen Beiträgen gelernt, löscht CI die Sitzung aber ich habe Setup die Config nicht den User-Agent passen, aber funktioniert immer noch nicht.

Gibt es dafür eine Lösung?

Antwort

2

Nach dem Tutorial in der CI forums konnte ich erreichen, was Sie verlangen.
1) Setzen Sie dieses in der SWFUpload JS config:

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

2) und legen Sie die MY_Session.php Datei in Ihrem application/libraries/ Ordner.

3) Die neue Bibliothek sollte in dem Moment geladen werden, in dem die Ansicht geladen wird, wenn nicht (aus irgendeinem Grund), dann laden Sie Ihre Bibliothek in den Controller.

PS: Sie müssen eingestellt werden:

$config['sess_match_useragent'] = FALSE; 

Andernfalls wird eine neue Sitzung für einen User-Agent Shockwave Flash

EDIT erstellt werden: Okay, basierend auf Ihren comment..you wirklich festlegen müssen Ihre post_params Einstellung auf Ihre aktuelle Sitzung, so dass es gesendet werden kann, wenn der Flash post zu Ihrem Controller, jetzt in Ihrem Fall das Beste, was ich denken konnte, ist der folgende:
Ihre externUntouchableJsFile.js:

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

Und in Ihrer PHP-Ansicht und vor dem Laden dieses JS-Datei haben so etwas wie:

<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: Da Sie eine externe JS-Datei verwenden, können Sie vergessen, zu definieren, die globale Variable so verwenden:

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

Ich habe diese Konfiguration bereits, nur dass ich die Parameter nicht so übergeben kann, weil ich eine JS-Datei verwende, um das Skript und nicht PHP-Dateien zu initiieren. Ich kann die Variablen nicht so aufzählen. Nur wenn ich eine PHP-Datei mit JS-Header verwenden würde, nur dafür, aber ich bevorzuge diese Methode nicht. Vielen Dank. –

+0

Danke für die Mühe. Das funktioniert. –

+0

Froh, dass es geholfen hat! :-) – ifaour

0

Es muss erwähnt werden, dass die Flash-Datei von derselben Domäne wie Ihre CI-Site geliefert werden sollte oder dass die anderen Cookies nicht gelesen werden können. Stellen Sie außerdem sicher, dass der Anmelde-Cookie-Pfad auf den Stammpfad festgelegt ist. Wenn SWFUpload den Login-Cookie nicht lesen kann, kann er ihn auch nicht senden.

Flash hat eingeschränkten Zugriff auf Sitzungscookies, . Ist es möglich, dass Sie die automatische Anmeldung eingestellt haben, um zu verhindern, dass ein Ablaufdatum festgelegt wird (in config/tank_auth.php) und damit ein Session-Cookie wird? Wenn dies der Fall ist, kann die SWFUpload-SWF möglicherweise nicht auf den Autologin-Cookie-Wert zugreifen oder diesen senden, je nach der Version von Flash Player auf dem Computer. Überprüfen Sie Ihre Cookie-Ablaufwerte mit einem Debug-Tool wie Firebug, um festzustellen, ob dies der Fall ist. Wenn der Upload funktioniert, wenn Sie eine "Merken" -Mailbox anklicken, aber nicht anders, würde dies auf ein Session-Cookie-Problem hinweisen.

Um zu erzwingen, dass die SWF-Datei den TankAuth-Cookie-Wert bei Dateiuploads übergibt, könnten Sie zuerst die Cookie-Hilfsprogrammfunktion "get_cookie" überlasten, um im Wertefeld $ _COOKIE oder $ _POST nach Werten zu suchen. Dann scheint es, dass with SWFUpload v2 you can send additional POST values along with the upload, und dies wäre die Möglichkeit, den Autologin-Schlüssel zu senden, die dann Ihren Controller die user_id erhalten würde. Bevor Sie jedoch den Cookie-Helfer hacken, stellen Sie sicher, dass Ihre beweglichen Teile zuerst funktionieren, wie im ersten Abschnitt beschrieben.

0

I, indem man die angemeldeten Benutzer für diese eine grobe Korrektur anwenden ID in der URL, und bekommen es von Javasc geschafft haben, ript mit URL-Funktionen. Es ist die beste Methode, auf die ich mich jetzt verlassen kann, es stört mich nicht so sehr, dass die Benutzer-ID sichtbar ist, weil ich einen verwalteten Iframe verwende, um diesen spezifischen Teil der App anzuzeigen, und die App nur für den internen Gebrauch des Unternehmens ist .

Danke für Ihre Antworten.

Verwandte Themen