2017-11-22 155 views
5

mam aplikację laravel hostowaną na serwerze a.com, a ta aplikacja obsługuje wszystkie uwierzytelnienia dla innych aplikacji laravel instalowanych na innych serwerach, Serwer 1 - app.com - czy zarządzanie uwierzytelniania/użytkownika dla systemu i zapisuje je w pliku cookie mają być wysyłane przez serwery 2,3 i 4,Auth :: user() zwraca null w domenie, w aplikacji laravel

server 2. mail.app.com 
server 3. fms.app.com 
server 4. dod.app.com 

Istnieje funkcja Initialize na serwerach 2,3 i 4 który próbuje odszyfrować pliki cookie wysyłane przez domeny z serwera 1., który wygląda mniej więcej tak.

public function initialize(){ 
     $mail = json_decode($logged_in_user_cookie)->email; 
     $user = User::where('email', $mail)->first();  
     if(!$user){ 
     $user = new User; 
     $user->email = $mail; 
     $user->save(); 
     } 
     Auth::login($user); 

     if(Auth::check()){ 
     //dd($user); - works fine.. 
     return redirect()->route('dashboard'); 

     }else{ 
     echo 'user not logged in '; 
     } 

    } 

Serwery 2, 3 i 4 posiada również tabelę użytkowników, ale bez hasła, więc jeśli plik cookie uderza każdy z tych serwerów, system odczytuje plik cookie i wydobywa obiekt użytkownika z pliku cookie i sprawdza, czy jakikolwiek użytkownik nie istnieje, tworzy użytkownika, a następnie używa [Auth :: login ($ user)], aby zalogować użytkownika do bieżącego systemu, a jeśli użytkownik już istnieje ... automatycznie loguje użytkownika ..

teraz mamy problem, na tej linii return redirect() -> route ("dashboard"); Przekierowuje cię na stronę pulpitu aplikacji i dd (Auth :: user()) - zwraca null,

i nie jesteśmy w stanie ustalić, dlaczego tak działa. ponieważ Auth :: user() powinien być dostępny w całej aplikacji, Wystarczy pomyśleć o tym, jak działa Google,

google.com, - jeden login kontroluje każdą aplikację, w tym youtube drive.google.com, mail .google.com, play.google.com, news.google.com, plus.google.com, youtube.com - właśnie to próbujemy.

Odpowiedz

2

Przejdź do pliku config/session.php i zmień nazwę tego "cookie" => "laravel_session" na nazwę sesji. Na przykład "cookie" => "foo_session". To powinno działać.