2014-06-15 14 views
5

Mam problemy z Auth :: check() w subdomenie pośrednictwem żądań AJAX .. scenariusz: 2 subdomenylaravel Cors sesja subdomeny

www.testing.dev 
api.testing.dev 

Pojedyncze logowanie/sesji pomiędzy tymi dwoma .. w laravel config/session.php mam ustawiony 'domain' => ".testing.dev", i wszystko działa dobrze, jestem w stanie zalogować się na jednej stronie i nadal być zalogowany na drugiej stronie również!

Ale gdy używam ajax jest problem .. scenariusz: będąc w api.testing.dev, ja wykonać z Firebug, js, niezależnie

$.ajax({ 
    url: 'http://api.testing.dev/who', 
    type: 'GET', 
    cache: false 
}); 

się api.stesting.dev/who powraca:

public function getWho(){ 
    return var_dump(Auth::user()); 
} 

odpowiedzią jest informacja o moim koncie! wszystko poprawnie ..

Jeśli od www.testing.dev wykonuję tę samą kwerendę ajax, otrzymuję Auth :: check() zwracając wartość null. Chociaż ja dostać normalną odpowiedź, więc nie ma problemu z wzajemnej konfiguracji domeny .. oto moje nagłówki w na trasie do api.testing.dev

header('Access-Control-Allow-Origin: *'); 
header('Access-Control-Allow-Methods: OPTIONS, POST, GET, PUT, DELETE'); 
header('Access-Control-Allow-Headers: *'); 
header('Access-Control-Allow-Credentials: true'); 
header('Access-Control-Allow-Credentials: true'); 

Strona działa na localhost z wamp.

Edytuj: przy domyślnym sterowniku sesji 'driver' => 'file' po pierwszym zalogowaniu w pliku app/storage/sessions znajduje się jeden plik. A jeśli przejdę z jednej subdomeny do drugiej, żadne inne pliki nie zostaną wygenerowane. Chociaż podczas tworzenia ajaxa CORS, za każdym razem, gdy generowany jest nowy plik ...

+1

Występuje tutaj dokładnie ten sam problem. –

+0

Szybkie pytanie, jak skonfigurować domenę plików cookie? –

+1

w pliku app/config/session.php, ustaw odpowiednio "domenę". (dla wielu witryn pod-domeny ustaw go na ".site.com") – ActonDev

Odpowiedz

0

Widząc konfigurację, być może masz ten sam problem, który miałem. Nie korzystałem z Auth, ale sesje i zawsze otrzymywałem null. Rozwiązałem go, zmieniając w ten sposób:

header('Access-Control-Allow-Origin: *'); 
... 
header('Access-Control-Allow-Credentials: true'); 

do tego:

header('Access-Control-Allow-Origin: http://localhost:9000'); 
... 
header('Access-Control-Allow-Credentials: true'); 

Dlatego, że znalazłem to, że podczas korzystania poświadczenia musi określić pochodzenie Ze względów bezpieczeństwa i dla AJAX zażądać również podania danych uwierzytelniających. Używam Angular i zrobiłem to z $httpProvider.defaults.withCredentials=true;, ale naprawdę nie znam odpowiedniej instrukcji dla jQuery, ale mam nadzieję, że możesz ją znaleźć.

Sprawdź nagłówki żądań i odpowiedzi ze swoim ulubionym debuggerem (Firebug dla mnie). Powinny mieć atrybut cookie (zawiera on coś z "laravel", "token" itp.), Który drugi raz powinien być równy nagłówkowi pierwszej odpowiedzi.