Kullanıcı kimlik doğrulama / login Oturum Rolü?

2 Cevap php

Birisi ben kadar geldim bir soru ile bana yardım umuyordum.

Ben genel oturumu veri depolama işleyen bir Session nesnesi var, ben de bir, kullanıcıların kimlik bilgilerini doğrular bir Authentication nesnesi var.

Başlangıçta Sonra Doğrulama nesnesinin bir örneği oluşturulan ve kimlik bilgilerini doğrulamak bir giriş yöntemi vardı benim Session nesnesine istenilen Doğrulama sınıf adı geçti. Ben bir alıcı aracılığıyla bir oturum değişkeni bu doğrulama sonucunu saklı ve hazır. Kullanıcı verileri de daha sonraki kullanım için Oturum depolandı. Bütün bunlara ek olarak, ben Oturumu'nda gelen kullanıcı verileri kaldırır ve böylece dışarı kullanıcı oturum bir çıkış yöntemi var.

Benim soru Session nesne kendi hesabına giriş kullanıcıların oynaması gereken rol nedir?

Ve ne diğer yolları tek ben çok fazla benim Session nesnesinde sarılmış alıyorum sanki hissediyorum şu anda duruyor gibi, kullanıcı girişi işleme hakkında gitmek önerebiliriz.

2 Cevap

Sadece kimlik doğrulaması yöntemini çağırarak oturumu (veya başka bir veri deposu) içinde uygun veri depolamak için Auth içindeki mantığı tetiklemesi ve Auth de Getirme için kulanılmalıdır / bu bilgi iptal . Yani örnek ile yorumunuzu formu bu olabilir:

class Auth {
  public static function authenticate($identity, $pass)
  {
     // do lookup to match identity/pass if its good then

     /* assume $auth is an array with the username/email or 
        whatever data you need to store as part of authentication */
     Session::set('auth', $auth);
     return true;

     // if auth failed then 
     Session::set('auth', array('user'=>'anonymous'));
     return false;
  }

  public function isAuthenticated()
  {
     $auth = Session::get('auth');
     if(!$auth)
     {
       return false;
     }

     return (isset($auth['user']) && $auth['user'] !== 'anonymous'); 
   }
}

[...] as it stands right now I feel as though I'm getting too much wrapped up in my Session object.

Ve id katılıyorum. Idelaly doğrulama / kimlik bilgileri için sadece Auth / Acl nesne (ler) ile etkileşim shoudl. Daha sonra durum bilgisi deposu olarak oturumu kullanmak istiyorum ... ama sen onun bile oturumda depolanan bakım gerekir. Auth / Acl nesne (ler) utilizng kodu bu gerçeği tamamen habersiz olmalıdır.

Örneğin:

//Bad

if($session->get('authenticated', 'auth'))
{
  // do stuff
}


// also bad

if(isset($_SESSION['authenticated']))
{
  // do stuff
}


//Good

if($auth->isAuthenticated())
{
  // do stuff
}

// inside $auth class it might look like this
public function isAuthenticated()
{
  $store = $this->getSotrage(); // assume this returns the $_SESSION['auth']
  return isset($store['authenticated']);
}

Oturumu çeşitli sayfalar arasında devlet çeşit veya veritabanı isabet olmadan ona almak için hızlı bir şekilde erişilebilir gerekiyorsa başarmış istediğiniz kullanıcı verilerini tutan için iyi bir yerdir. Bu bilgi güvenli tutmak için kötü bir fikirdir: oturumda (yeniden şifreleri / vb), ancak vb kullanıcı adı, isim, e-posta adresi, tercihleri ​​gibi hızlı erişim bilgileri oturumda koymak için tüm iyi veridir. Gerçi basit tutmaya çalışın.

Oturum (veya ilişkili cookie) sadece hiç tanımlama için kullanılması gerektiğini, ama unutmayın. Bu, kimlik doğrulama için kullanılmamalıdır.

Kimlik doğrulaması nesne iyi bir yöntemdir. Sadece sürece ihtiyacı olduğu ve korumalı hassas verileri korumak için mevcut tüm gerekli fonksiyonlara sahip olduğu güvenli bilgi tutar emin olun.