2010-05-06 7 views
13

मेरे पास एक GWT ऐप है, और एक उपयोगकर्ता लॉगिन फॉर्म की आवश्यकता है। मैं ब्राउज़र को उपयोगकर्ता के लिए उपयोगकर्ता नाम और पासवर्ड सहेजने देना चाहता हूं। मेरा मानना ​​है कि मुझे इसके लिए 'नियमित' फॉर्म का उपयोग करने की आवश्यकता है (जीडब्ल्यूटी द्वारा उत्पन्न नहीं)। तो मैं एक साधारण से फ़ॉर्म बनाया:ब्राउज़र को उपयोगकर्ता नाम/पासवर्ड मानों को लॉगिन में रखें <form>?

<form id="myform"> 
    <input type="text" name="username"> 
    <input type="password" name="password"> 
    <input type="submit" value="Login" /> 
</form> 

अब मैं प्रस्तुत प्रक्रिया को बाधित करने के लिए, उपयोगकर्ता नाम/पासवर्ड हड़पने, RPC के माध्यम से लॉगिन करना चाहते हैं, लेकिन ब्राउज़र उपयोगकर्ता के लिए उन क्षेत्रों की सामग्री को बचाने के लिए है, अगर वे चाहते हैं। इसके बारे में जीडब्ल्यूटी देव बोर्डों पर कुछ पोस्ट हैं, सुनिश्चित नहीं हैं कि कौन सा काम करता है क्योंकि उनमें से कोई भी मेरे लिए बॉक्स से बाहर काम नहीं कर रहा है। मुझे लगता है कि यह इस तरह दिखना चाहिए:

FormPanel form = FormPanel.wrap(Document.get().getElementById("myform"), false); 
form.setAction("javascript:;"); 
form.addSubmitHandler(new SubmitHandler() { 
    public void onSubmit(SubmitEvent event) { 
     // Do my RPC call here? 
     // User should have been prompted to save password already now? 
    } 
}); 

क्या किसी को यह काम करने के लिए कैसे पता है?

उत्तर

5

जबकि एक ही के लिए खोज मैं गूगल-वेब-टूलकिट-इनक्यूबेटर की विकि में इस पैरा भर में ठोकर खाई:

स्वत: पूर्ण और GWT

कुछ ब्राउज़र स्टोर करने के लिए विकल्प प्रदान करते हैं उपयोगकर्ता नाम/पासवर्ड संयोजन ताकि अगली बार जब वे पृष्ठ पर जाते हैं तो वे स्वचालित रूप से उपयोगकर्ता के लिए भर जाते हैं। हालांकि, आमतौर पर यह केवल तभी काम करता है जब दो इनपुट बॉक्स (एक प्रकार का पासवर्ड) हो, और केवल तभी जब उन इनपुट बॉक्स को मुख्य पृष्ठ के साथ लोड किया जाता है, और बाद में जावास्क्रिप्ट के माध्यम से नहीं जोड़ा जाता है (जो कि जीडब्ल्यूटी करता है)।

इन इनपुट बॉक्स को दिखाने के लिए मजबूर करने के लिए, उन्हें एक अदृश्य div में प्रोजेक्ट के HTML में भरें। फिर, जीडब्ल्यूटी में, टेक्स्टबॉक्स और पासवर्ड टेक्स्टबॉक्स बनाने के बजाय, div को दृश्यमान बनाएं और DOM का उपयोग करके मानों को पढ़ें। पुस्तकालय।

देखें: http://code.google.com/p/google-web-toolkit-incubator/wiki/LoginSecurityFAQ

+0

मेरे लिए काम नहीं किया –

+0

@jkremser कौन सा ब्राउज़र? – funkybro

+0

दोनों एफएफ और क्रोम। समस्या यह है कि मैं जावा में लिखी गई अपनी खुद की प्रमाणीकरण विधि का उपयोग करता हूं इसलिए मुझे सबमिट बटन पर क्लिक करने के बाद इस विधि को आमंत्रित करना होगा। मैंने कई दृष्टिकोणों की कोशिश की है: मैं "बदसूरत" सादा एचटीएमएल लॉगिन फॉर्म का उपयोग नहीं करना चाहता, इसलिए मैंने जीडब्ल्यूटी का इस्तेमाल किया, और लॉगिन पर क्लिक करने के बाद मैं HTML छिपे हुए फॉर्म में उपयोगकर्ता नाम और पासवर्ड कॉपी करता हूं और कृत्रिम रूप से क्लिक करता हूं उस फॉर्म पर सबमिट बटन। यह फॉर्म जेएसएनआई के माध्यम से जावा लॉगिन विधि चलाता है -> काम नहीं करता (ब्रोसर ने पासवर्ड की बचत का सुझाव नहीं दिया) –

12

इस प्रकार से आपका प्रपत्र (myform) क्योंकि हर ब्राउज़र स्टोर करने के लिए पहचान के साथ एक संभावित लॉगिन प्रपत्र को खोजने के लिए अपने स्वयं के अनुमान का उपयोग करता लग रहा है पर निर्भर करता है (क्रोम उदाहरण के लिए एक कार्रवाई की जरूरत में मौजूद विशेषता मार्कअप http://code.google.com/p/chromium/issues/detail?id=29513)। तो हमने जो कुछ किया है, उसके लिए हमारे ब्राउज़र को हर ब्राउज़र के लिए याद रखने योग्य प्रमाण-पत्र सुविधा के लिए Google करना है। नतीजा निम्न फॉर्म तत्व था:

<form id="login-form" style="display:none" action="login"> 
    <input type="text" tabindex="0" name="username" id="login-username"> 
    <input type="password" tabindex="0" name="password" id="login-password"> 
    <input style="position: absolute; left: -9999px; width: 1px; height: 1px;" type="submit"> 
</form> 

आपके लिए भी काम कर सकता है।

संपादित

यहाँ एक उदाहरण है कि मेरे लिए काम करता (केवल FF संस्करण 14.x की कोशिश की)। फॉर्म टैग से display:none को निकालना न भूलें।

public class Starter implements EntryPoint { 

    private static final String FORM_ID = "login-form"; 
    private static final String USER_ID = "login-username"; 
    private static final String PASSWORD_ID = "login-password"; 

    @Override 
    public void onModuleLoad() { 
     injectLoginFunction(); 
     TextBox fUsername = TextBox.wrap(DOM.getElementById(USER_ID)); 
     fUsername.setStyleName("gwt-TextBox"); 
     PasswordTextBox fPassword = PasswordTextBox.wrap(DOM.getElementById(PASSWORD_ID)); 
     fPassword.setStyleName("gwt-PasswordTextBox"); 
     FormPanel fLoginForm = FormPanel.wrap(DOM.getElementById(FORM_ID), false); 
     fLoginForm.setAction(""); 
     fLoginForm.addSubmitHandler(new SubmitHandler() { 

      @Override 
      public void onSubmit(SubmitEvent event) { 
       Window.alert("test"); 
      } 
     }); 
     fLoginForm.getElement().setAttribute("onsubmit", "login();return false;"); 
    } 

    private static void doLogin() { 
     Window.alert("test"); 
    } 

    private static native void injectLoginFunction() /*-{ 
     $wnd.login = function() { 
      @test.client.Starter::doLogin()(); 
     }; 
    }-*/; 
} 
+0

कार्रवाई = "लॉगिन" का अर्थ है, उपयोगकर्ता को http: // localhost: 7080/coregui/login? Username = xy और password = yx पर रीडायरेक्ट किया जाएगा, मैं इसे संभालने के लिए कोई अन्य सर्वलेट नहीं जोड़ना चाहता हूं। –

+0

आप बाद में जो एक्शन एट्रिब्यूट चाहते हैं उसे संशोधित कर सकते हैं, ब्राउजर के लिए महत्वपूर्ण है जब पेज लोड होने पर डोम में केवल यही होता है। – z00bs

+0

और विशेष रूप से आपके पास क्या है? क्या आपके पास कोड के कामकाजी टुकड़े का कोई उदाहरण है? मैंने कोशिश की है "जावास्क्रिप्ट: window.doSubmitForm();" जहां doSubmitForm मेरा जावा फ़ंक्शन जेएसएनआई के माध्यम से उपलब्ध है जो लॉगिन तर्क करता है, यह काम करता है, लेकिन ब्राउज़र पासवर्ड सहेजने की पेशकश नहीं करता है –

0

:) बस "सबमिट करें" के लिए & प्रपत्र पैनल में अपनी आदानों & बटन डाल अपना लॉगिन बटन प्रकार सेट!

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

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