2012-08-05 23 views
6

के साथ उपयोगकर्ता प्रबंधन मैं अपने उपयोगकर्ता को कुकी के माध्यम से प्रबंधित करने की कोशिश कर रहा हूं। यह इतना आसान नहीं है क्योंकि इस विषय के बारे में बिल्कुल कोई दस्तावेज नहीं है।जावा प्ले! 2 - कुकीज़

नमूना की मदद से "zentask" मैं इस बनाया:

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; 

    } 

मैं इसे इस तरह उपयोग कर रहा हूँ:

    :

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

    अब मैं कई सवाल/समस्या है

  • 1.) कुकी dectypted नहीं है और हमेशा एक ही लग रहा है। जैसे bdb7f592f9d54837995f816498c0474031d44c1a-उपयोगकर्ता नाम% 3Akantaki

  • 2.) वर्ग Security.Authenticator क्या करता है?

  • 3.) मुझे लगता है कि कुकीज़ के माध्यम से उपयोगकर्ता प्रबंधन एक बहुत ही आम समस्या है, खेलने करता है! 2.0 एक पूर्ण समाधान की पेशकश मुझे? या कम से कम कुछ दस्तावेज है?

उत्तर

12

Play Authenticate Joscha Feth द्वारा - फिर भी के लिए authentication और authorization पूर्ण ढेर है। (GitHub पर उपलब्ध है)

यह रेडी-टू-उपयोगsecuresocial + पूर्ण Deadbolt 2 की अवधारणाओं का उपयोग करता है जो समर्थन (स्टीव चलोनेर द्वारा) जावा के लिए नमूना, को शामिल किया गया। यह है:

  • साथ ई-मेल, गूगल, फेसबुक, Foursquare, ट्विटर, OpenId और कस्टम प्रदाताओं register और log in उपयोगकर्ताओं के लिए संभावना में बनाया गया।
  • बहुभाषी समर्थन (वर्तमान में: अंग्रेजी, जर्मन, पोलिश)
  • अनुकूलन टेम्पलेट्स (भी सूचना के ई-मेल के लिए) roles के लिए
  • समर्थन और permissions (Deadbolt 2 के माध्यम से)
  • पासवर्ड वसूली समर्थन

इसमें जावा के लिए नमूना ऐप है। आप इसे अपने ऐप में शामिल कर सकते हैं।

+0

यह अद्भुत लग रहा है, धन्यवाद! –

+0

बस उत्सुक, क्या आप मुझे एक बहुत ही संक्षिप्त अवलोकन दे सकते हैं जो मुझे मोंगोद के लिए काम करने के लिए बदलने की ज़रूरत है? मुझे लगता है कि मुझे हर एसक्यूएल विधि जैसे - play.find इत्यादि को हटाना होगा और इसे मॉर्फिया से बदलना होगा? मैं सिर्फ इसलिए पूछ रहा हूं क्योंकि मुझे बहुत कुछ बदलना होगा। शुरुआत में एक बड़ी गलती नहीं करना चाहते हैं –

+1

क्षमा करें, मैं 'मोंगोडीबी' और 'मॉर्फिया' विषय में आपकी मदद नहीं कर सकता हूं, मुझे लगता है कि यह बिल्कुल सही है कि नए प्रश्न को शुरू करना सबसे अच्छा विचार है। – biesior

12

रूप Zentask sample में दिखाया गया है, अपने Secured वर्ग Security.Authenticator का विस्तार करना चाहिए।

इस के साथ, यह एक @Security.Authenticated एनोटेशन या तो एक नियंत्रक पर, या एक कार्रवाई पर डाल करने की अनुमति देगा। यह एनोटेशन क्लाइंट को किसी अन्य पृष्ठ पर रीडायरेक्ट करने की अनुमति देता है यदि उपयोगकर्ता सही तरीके से अधिकृत नहीं है (Security.Authenticator.onUnauthorized() विधि ओवरराइड करके)।

  1. Check authorization:

    कार्यप्रवाह निम्नलिखित है

  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

हाँ धन्यवाद मैं पहले से ही ज़ेंटस्क उदाहरण के माध्यम से पढ़ता हूं। लेकिन ज़ेंटस्क उदाहरण में, अनधिकृत() या getUsername() का उपयोग कभी नहीं किया जाता है, इसलिए मुझे लगता है कि playframework उन्हें कॉल कर रहा है। जब कोई उपयोगकर्ता अधिकृत/अनधिकृत होता है तो कैसे खेलता है? –

+0

getUsername() विधि के माध्यम से: यदि उपयोगकर्ता प्रमाणीकृत नहीं है तो शून्य वापस आ जाता है http://www.playframework.org/documentation/api/2.0.2/java/play/mvc/Security.Authenticator.html#getUsername(play। mvc.Http.Context) –

+0

आह ठीक है धन्यवाद। :) –

संबंधित मुद्दे