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.