Laravel 5 Auth Logout oturumu yok etmiyor

Yeni projem için Laravel5 Auth sistemini kullanıyorum, kayıt ve giriş fonksiyonlarını problemsiz kullanabiliyorum ancak çıkış beklendiği gibi çalışmıyor, ancak $ redirectAfterLogout 'da belirtilen url'ye yönlendirildim ancak oturumu mahvetmez, bu yüzden oturum kapatma düğmesine bastıktan sonra bile kontrol panelini görebiliyorum.

Laravel Auth sisteminde bir hata yaptı mı, lütfen öner, teşekkürler

12
Seansın tahrip edilip edilmediğini nasıl bildin? Rotaları auth ile sınırlandırdınız mı?
katma yazar Sougata Bose, kaynak
@sgt Oturumu kapat bağlantısını tıkladıktan sonra /auth/login adresini ziyaret edemiyorum, bu beni kontrol paneline yönlendirir.
katma yazar seoppc, kaynak
Aynı sorunu yaşıyordum, benim hatam katman aracı "konuk" çıkış yoluna koymak oldu. :/Belki de aynı problemi yaşıyorsun.
katma yazar Vagner do Carmo, kaynak

11 cevap

Kullandığınız herhangi bir kod parçasını girmediniz. Ancak, aşağıdaki kod çalışır:

public function getLogout(){
        Auth::logout();
        Session::flush();
        return Redirect::to('/');
    }

Session :: flush (); varolan tüm oturumları temizler.

13
katma
Şu anda Laravel 5 oluşturma auth mekanizması kullanıyorum
katma yazar seoppc, kaynak
Aynı sorunu yaşıyordum, benim hatam katman aracı "konuk" çıkış yoluna koymak oldu. :/Belki de aynı problemi yaşıyorsun.
katma yazar Vagner do Carmo, kaynak
Öyleyse şimdi oturumu imha edebileceğinizi umuyorum?
katma yazar Amita, kaynak

Laravel 5.2'i kullanarak bir dinleyiciyi kaydettim, oturum kapatma olayını ele aldım ve yukarıda önerildiği gibi Session :: flush adını verdim. Oldukça iyi çalışıyor gibiydi. Umarım bu yardımcı olur.

EventServiceProvider.php

protected $listen = [
    'App\Events\SomeEvent' => [
        'App\Listeners\EventListener',
    ],
    'Illuminate\Auth\Events\Logout' => [
        'App\Listeners\ClearSessionAfterUserLogout'
    ],
]; 

ClearSessionAfterUserLogout.php

public function handle(Logout $event)
{
    Session::flush();
}
6
katma
Aynı sorunu yaşıyordum, benim hatam katman aracı "konuk" çıkış yoluna koymak oldu. :/Belki de aynı problemi yaşıyorsun.
katma yazar Vagner do Carmo, kaynak

Veritabanı oturumu sürücüsüne geçtim ve çıkış işlemimde aşağıdaki kodu kullandım

$request->session()->getHandler()->destroy($request->session()->getId());
1
katma

Aynı sorunu yaşadım ve her şeyi denedim, ama sonunda düzeltebilirdim.

Benim sorunum, oturum kapatma düğmesine bastığımda, daha önce henüz yanıtlanmamış bazı http istekleri almamdı, bu nedenle kullanıcı oturumu kapattığında bile, daha sonra bekleyen isteklerin yanıtıyla tekrar oturum açtı. İşte bir örnek:

Another Request |   ***********************************
Logout Request  |          ********************
                |
Time            | --|------|-------------------|------|------>
                   t1      t2                  t3     t4

Bu yüzden cevaplanmayan istekleri kaldırmak benim için çalıştı. Umarım bu cevap yardımcı olur :)

1
katma
Bu yanıtlanmayan istekleri nereye kaldırmalı?
katma yazar leonardeveloper, kaynak
Benim durumumda bu istekleri bazı jQuery ajax çağrılarında buldum, bu yüzden bu kodu kaldırdım ve çıkış beklendiği gibi çalışmaya başladı. Umarım bu konuda yardımcı olabilirim :)
katma yazar dani24, kaynak

/Vendor/laravel/framework/src/Illuminate/Foundation/Auth/AuthenticatesUsers.php ... işlevinde getLogout() işlevine hiçbir zaman ulaşılmadığı için, logout() yönteminin hiçbir zaman çalışmadığı anlaşılıyor.

Benim durumumda, /app/Http/routes.php ... bunun yerine "Route :: get ('auth/logout', 'Auth \ AuthController @ getLogout');" Bunu şöyle değiştirdim: "Route :: get ('auth/logout', 'Auth \ AuthController @ logout');"

1
katma
Bu çözüm bu arada Laravel 5.2.29 içindir. Belki de sürümlerin perde arkasında küçük revizyonları vardır.
katma yazar Frederick G. Sandalo, kaynak

kimlik doğrulaması

public function logout(Request $request)

bunu değiştir

$request->session()->regenerate();

buna

$request->session()->regenerate(true);
1
katma
İşe yaradı. Teşekkürler.
katma yazar Mahfuzul Alam, kaynak

AuthController.php dosyasındaki logout yöntemini geçersiz kılabilirsiniz.

İşte kod örneği:

public function logout(){
        Session::flush();
        Auth::guard($this->getGuard())->logout();
        return redirect(property_exists($this, 'redirectAfterLogout') ? $this->redirectAfterLogout : '/');
    }
1
katma

In your case you are not probably reaching the logout() method. If you are using Laravel 5 builting auth mechanism then you will run AuthenticatesAndRegistersUsers trait getLogout() method which does $this->auth->logout();

Bu kodu bulun, hata ayıklama için aşağıdaki yöntemi kullanın. "Logging out" dizesini görüyorsanız, oturumu kapatmış olmanız gerekir. O zaman yönlendirme ile ilgili bir sorun var ve oturumu kapatmanız asla gerçekleşmez.

/**
 * Log the user out of the application.
 *
 * @return \Illuminate\Http\Response
 */
public function getLogout()
{
    dd("Logging out");
    $this->auth->logout();

    return redirect('/');
}
0
katma
Diğer seçenek, hesabınızı hatırlamanız olabilir. Lütfen logout() çağrısından önce ve sonra kullanıcı oturum açma durumunu kontrol edin. Dd kullanabilirsiniz ($ this-> auth-> user ()); bunun için. Bu, kullanıcının oturumu kapattıktan sonra oturum açıp açmadığından emin olarak size
katma yazar Margus Pala, kaynak
Gelecekte bir noktada kullanıcının tekrar giriş yapmış olması gerekir. Kontrol cihazınızın getLogin() yöntemini kontrol etmeniz ve tam olarak nerede olduğunu öğrenmeniz gerekir.
katma yazar Margus Pala, kaynak
Evet, oturum kapatma bağlantısını tıkladıktan sonra ekranda "oturumu kapatıyorum" görüyorum, bu, oturum kapatma bağlantısının bu işleve çarptığı anlamına gelir.
katma yazar seoppc, kaynak
Bu testi denedim, arama sonrasında boşaldık, bu onun auth-> user() 'ı yok ettiği anlamına gelir; ancak neden giriş sayfasının oturumu kapattıktan sonra bile gösterge panosuna yönlendirdiği anlamına gelir.
katma yazar seoppc, kaynak

Bununla kavga ettim ve bir çözüm buldum.

Kısacası: Laravel oturumu katman yazılımı ile okur ve yazar. İsteğin başında depolanan oturumu okur ve isteğin sonunda herhangi bir değişiklik yazar. Yeniden yönlendirme yaparsanız, geçerli istek hiçbir zaman bitmez ve ara katman yazılımı yazılmaz.

Peki, bu nasıl düzeltilir? Uygulamanıza bağlı olarak ... doğrudan çağırmak yerine return yönlendirme komutunu vermelisiniz.

return redirect($redirectAfterLogout)
0
katma

Benzer bir sorunla karşılaştım ve oturumlar için 'dosya' sürücüsünü kullanarak bir şekilde sunucu daha sonra değiştiremediği dosyalar oluşturuyordu ancak dosya izni uyarısı yoktu. Redis uygulamasına geçtim, ne yazık ki dosya oluşturma sorununu nasıl çözeceğimi söyleyemem, ancak bunun bir zaman kazanabileceğini düşündüm.

0
katma

İstek nesnesini bir denetleyici eyleminde kabul ederek (Bunu denetleyici ad alanı bildirgesinden sonra eklemeyi unutmayın: kullan Auth; ):

 /**
 *
 * Render page
 *
 * @route POST /user/{user_id}/logout
 *
 * @return \Illuminate\Contracts\View\Factory|\Illuminate\View\View
 */
public function logout(Request $request) {
    Auth::logout();
    $request->session()->flush();
}
0
katma