2012-08-05 16 views
6

Kullanıcılarımı çerez aracılığıyla yönetmeye çalışıyorum. Bu kadar kolay değil çünkü bu konu hakkında kesinlikle bir doküman yok. Numunenin yardımıylaJava Oyunu! 2 - Çerezlerle kullanıcı yönetimi

"zentask" Bu yapmıştır:

session("username", filledForm.field("username").value()); 

public class Secured{ 

    public static Session getSession() { 
     return Context.current().session(); 
    } 

    public static String getUsername() { 
     return getSession().get("username"); 
    } 

    public static boolean isAuthorized() throws Exception { 
     String username = getUsername(); 
     if (username == null) 
      return false; 
     long userCount = DatabaseConnect.getInstance().getDatastore() 
       .createQuery(User.class).field("username").equal(username) 
       .countAll(); 

     if (userCount == 1) 
      return true; 

     return false; 

    } 

Ben bunu böyle kullanıyorum:

    :
    public static Result blank() throws Exception { 
    
         if (Secured.isAuthorized()) 
          return ok(Secured.getUsername()); 
         else 
          return ok(views.html.login.form.render(loginForm)); 
    
        } 
    

    Şimdi birkaç soru/sorunlar var
  • 1.) Çerez, dectypted değil ve her zaman aynı görünüyor. örn. bdb7f592f9d54837995f816498c0474031d44c1a-kullanıcıadı% 3Akantaki

  • 2.) Security.Authenticator sınıfı ne yapar?

  • 3.) Çerezler üzerinden kullanıcı yönetiminin çok yaygın bir sorun olduğunu düşünüyorum, oynar! 2.0 bana tam bir çözüm sunuyor mu? Ya da en azından bazı belgeler var mı?

    Zentask sample gösterildiği gibi

cevap

12

re ayrıca Joscha Feth tarafından authentication ve authorization - Play Authenticate için tam yığındır. (GitHub adresinde bulunabilir)

Bu desteğin (Steve Chaloner tarafından) + tam Deadbolt 2securesocial kavramlarını kullanan Java için hazır kullanımlı numuneyi, birleştirir. sahip olduğu:

  • e-posta, Google, Facebook, Foursquare, Twitter, OpenId ve özel sağlayıcılarla register ve log in kullanıcılara olasılığı inşa.
  • Çoklu dil desteği (şu anda: İngilizce, Almanca, Lehçe) (Deadbolt 2 aracılığıyla) (ayrıca bilgilendirme e-postalar için)
  • Özelleştirilebilir şablonlar
  • roles desteği ve permissions
  • Şifre kurtarma desteği

İçinde Java için örnek uygulama var. Bunu uygulamanıza dahil edebilirsiniz.

+0

Bu harika görünüyor, teşekkürler! –

+0

Sadece merak ediyorum, Mongodb için çalışmasını sağlamak için neye ihtiyacım olduğu konusunda bana çok kısa bir genel bakış sunabilir misiniz? Sanırım playmind gibi her sql metodunu kaldırmalı ve morphia ile değiştirmeliyim? Sadece soruyorum çünkü çok değişmem gerekecek. Başlangıçta büyük bir hata yapmak istemiyorum –

+1

Maalesef, MongoDB ve Morphia konuyla ilgili size yardımcı olamam, yeni soruya başlamak için en iyi fikir olduğunu düşünüyorum. – biesior

12

, sizin Secured sınıf Security.Authenticator uzanmalıdır. Bu, bir Denetleyici veya bir Eylem üzerinde bir @Security.Authenticated ek açıklamasına izin verecektir. Bu açıklama, kullanıcı uygun şekilde yetkilendirilmemişse (Security.Authenticator.onUnauthorized() yöntemini geçersiz kılarak) istemciyi başka bir sayfaya yönlendirmeyi sağlar.

  1. Check authorization:

    akışı aşağıdaki gibidir

  2. Add an unique identifier in the client cookies
  3. Check if authenticated
  4. Secure a controller or an action
  5. If not authorized, redirect the client to another page
+0

Evet, şimdiden zentask örneğini okuduğum için teşekkürler. Ama zentask örneğinde, onUnauthorized() veya getUsername() asla kullanılmaz, bu yüzden playframework onları çağırıyor sanırım. Bir kullanıcı yetkili/yetkisiz olduğunda oyun nasıl bilerek? –

+0

getUsername() yöntemiyle: kullanıcı kimliği doğrulanmamışsa null değerini döndürür http://www.playframework.org/documentation/api/2.0.2/java/play/mvc/Security.Authenticator.html#getUsername(play. mvc.Http.Context) –

+0

Ah tamam teşekkürler. :) –