Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CakePHP] Auth - brak danych w sesji po zalogowaniu
Forum PHP.pl > Forum > PHP > Frameworki
Neverhunted
Cześć,

Pytanie od nowicjusza w Cake...
Aby użytkownik mógł edytować rekord musi się zalogować.
Wykorzystuję Auth i standardową funkcję login (w kontrolerze UsersController).
  1.  
  2. function login(){
  3. }

Po wpisaniu loginu i hasła aplikacja zachowuje się tak jakby udało się zalogować. Przechodzi do strony głównej, ale...

Mam też zrobiony app_controller w folderze głównym i tam sprawdzam funkcją czy użytkownik jest zalogowany (uprawnienia nie mają znaczenia, chodzi o to by o ogóle był zalogowany).
  1. function _loggedIn(){
  2. $logged_in = false;
  3. if($this->Auth->user()){
  4. $logged_in=true;
  5. }
  6. return $logged_in;
  7. }

I wrzucam wynik funkcji do zmiennej $logged_in:
  1. ...
  2. function beforeFilter() {
  3. $this->set('logged_in', $this->_loggedIn());
  4. }

Oczywiście we wszystkich kontrolerach mam funkcję beforeFiler() o treści parent::beforeFilter().

Na stronie głównej index.ctp sprawdzam status zmiennej $logged_in i wyświetlam lub nie link do edycji rekordu.
  1. if($logged_in){
  2. echo $this->Html->link('Edytuj',
  3. array('controller'=>'rounds','action'=>'edit',$round['Round']['id']));
  4. }

Rzecz w tym, że zmienne sesyjne są puste i żadne "Edytuj" nie chce się wyświetlić.

Co ciekawe, gdy pisałem aplikację to działała - ale tylko na moim kompie (sprawdzałem na IE i Firefox).
Od wczoraj przestała działać i u mnie.

CakePHP 1.3.7, serwer IIS bez mod-rewrite, CGI/FastCGI.
Dodatkowo musiałem odkomentować i dopisać do jednej linijki kodu w pliku config/core.php
  1. Configure::write('App.baseUrl', env('SCRIPT_NAME').'?url=');

Bez tego "url" w ogóle linki nie działały. Ale teraz mam mało przyjazne dla oka linki np. .../app/index.php?url=/rounds
Ale to zupełnie inna historia ;-)

Sprawdziłem czy aplikacja działa na innym serwerze (Apache) i jest ok.
Co zatem jest nie tak w tym wypadku?
fleshgrinder
"Zmienne sesyjne są puste"? Czyli aplikacja zachowuje się tak, jakby użytkownik był zalogowany (jest dostęp do akcji chronionych z poziomu Auth), ale nie zapisuje zmiennej logged_in, czy w ogóle traci wszystkie informacje sesyjne?

Jeśli to ten drugi przypadek, sprawdź czy nie masz w swoich kontrolerach i modelach jakichkolwiek znaków po ?>
https://trac.cakephp.org/ticket/5031
Neverhunted
Po licznych testach wygląda na to, że nie załącza się Auth. U mnie znowu zaczęło działać, gdy skopiowałem aplikację do innego katalogu, ale nie działa u nikogo innego.

print_r($_SESSION) w moim przypadku wygląda tak (bez zalogowania):
  1. Array ( [Config] => Array ( [userAgent] => [time] => 1297769814 [timeout] => 10 ) [Auth] => Array ( ) [Message] => Array ( ) )

U innych wygląda to tak:
  1. Array ( [Config] => Array ( [userAgent] => [time] => 1297769814 [timeout] => 10 ))



===========Epilog========================
Gdy już straciłem nadzieję, gdy już dałem za wygraną, w trakcie prac nad innym projektem ...
Rozwiązanie przyszło niespodziewanie. Wystarczyło pogrzebać w pliku app/config/core.php.

Domyślną konfigurację:
  1. Configure::write('Session.save', 'php');

Należało zmienić na
  1. Configure::write('Session.save', 'my_session');

I po kłopocie... smile.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.