Laravel Türkiye Discord Kanalı Forumda kod paylaşılırken dikkat edilmesi gerekenler!Birlikte proje geliştirmek ister misiniz?

Çoklu kullanıcı girişini engellemek için:
session_id değerini users tablosunda bir alanda tutun. Kullanıcı giriş yaptığında tabloyu güncelleyerek session_id değerini yazsın. Daha sonra bir tane middleware oluşturun. Mevcut session_id ile kullanıcı tablosundaki session_id eşleşiyor mu kontrol etsin. Eşleşmiyorsa kullanıcıyı çıkış yaptırsın. Başka bir yerden kullanıcı girmeye çalışırsa users tablosundaki session_id değişeceği için diğer kullanıcı ilk istek yaptığında sistemden atılacaktır.

Güvenli bilgisayar için:
trusted_devices gibi bir tablo oluşturun. İçerisinde user_id, ip ve user_agent gibi bilgileri tutsun. Aynı şekilde kullanıcı giriş yaptığında bu bilgisayarı güvenli olarak kaydetmek isterse bu tabloya kaydetsin. Daha sonra girmeye çalıştığında eğer trusted_devices tablosunda kayıt varsa ve mevcut bilgisayar ile eşleşmiyorsa kullanıcıdan giriş için ek bilgi (telefon no gibi) talep edeceksiniz.

Ekleme:
Ben yazarken zaten cevaplamışsınız.

@mgsmus Evet yaptığım yöntemlerin ne olduğunu yazmadığımı fark ettim.
Tekrar tekrar aynı şeyler yazılmasını önlemek adına yazdım, fakat biraz geç kaldım.
İlginiz için teşekkür ederim, herhalde bilinen yöntemlerden denemediğim tek bu kaldı.
En yakın sürede deneyeceğim. Tekrar teşekkürler.

  1. User tablosuna 1 adet kolon ekle.
  2. User login olunca buraya benzersiz bir random oluştur ve aynı zamanda sessiona ekle.
  3. her sayfa istendiğinde sessionla user tablosunun bu kolonunu karşılaştır. uymuyorsa logout yap.
  4. user'in ilk girdiği sessionlar ile, tablodaki benzersiz uyum sağlamaz çünkü en son loginde tablodaki benzersiz değişmiş değimiş olur.
    İyi çalışmalar.

Buna ek olarak değişimi jquery ajaxla dinleyebilirsin. değiştiğinde logout yapabilir veya oturumu devralmak isteyip istemediğini sorabilirsin.

6 gün sonra

akcan Bunu nasıl görmemişim hayret, bunca zaman hep elle halletmiştim. Çok teşekkür ederim 😃

@akcan @mgsmus ordaki password degiskenini nerden elde ediyorsunuz ? Null olarak veya string bisey yazinca da tum cihazlardan cikis yapiyor ama o degerin nereden alinacagini belirtmemis dokumantasyonda ?

    @ac1919 LoginController kisminda authenticated methodu içinde tanımlayıp request('password') ile alabilirsiniz.

    Ornek

    protected function authenticated(){
    
    Auth::logoutOtherDevices(request('password'));
    
    .....
    }

      akcan logout yaparken password requestiyle isimiz yok ki ? Burdaki olayi anlamadim

        ac1919 kullanicinim dogru kullaniciyi dogru bilgiler vasitasiyla logout etmek icin.

        Yani ayni facebook gibi sitelerde bir ayar degistirmek istediginizde sifre sormasi gibi.

        ac1919 Dokümanda bir formdan geleceği belirtilmiş.

        This method requires the user to provide their current password, which your application should accept through an input form

        Kısaca kullanıcı login olurken zaten şifresini aldığımız için o sırada bu işlem kullanıcının yazdığı şifre ile yaptırılabilir. Örneğin LoginController::authenticated() iyi bir yer:

        /**
         * The user has been authenticated.
         *
         * @param \Illuminate\Http\Request $request
         * @param mixed $user
         * @return mixed
         */
        protected function authenticated(Request $request, $user)
        {
            $this->guard()->logoutOtherDevices($request->password);
        }

        ac1919 Burada amaç logout değil; kullanıcı bir cihazdan giriş yaptığında aynı zamanda başka bir cihazdan giriş yapmasını engellemek. Birinden girerse diğer tüm cihazlardan otomatik atacak. Bunu da logout değil login sırasında yaptırmanız lazım.

        Simdi anladim logout ile isimiz olmuyor login olurken girilen password diger oturumlarin hepsini sonlandirip session son login olunan ekranda kalicak.

        @mgsmus @akcan tesekkurler dostlar.

          ac1919 logoutOtherDevices() yönteminin yaptığı işi de söyleyeyim: Girilen şifreyi tekrar hash'leyip kullanıcıyı kaydediyor. AuthenticateSession middeware'i ise mevcut hash'i password_hash isimli oturum değişkeninden alıyor (yoksa kendi oluşturuyor) ve mevcut şifre ile eşleştiriyor. Kullanıcı başka bir cihazdan girdiğinde şifre tekrar hash'leniyor, oturumda tutulan ile veritabanındaki farklı olduğu için kullanıcı dışarı atılıyor.