2012-08-26 27 views
6

के लिए उपयोगकर्ता लॉगिन बनाने का प्रयास कर रहा हूं, मैं पूरी तरह से अटक गया हूं कि क्लोजर साइट के लिए लॉग-इन क्षेत्र कहां से शुरू करना है (मज़ेदार)।क्लोजर/कोर्मा/पोस्टग्रेएसक्यूएल साइट

मैं कई संसाधनों, मैं नीचे पोस्ट करेंगे जो, निर्दयता से कॉपी/पेस्ट किया कोड को देखा है, और निकटतम मैं प्राप्त कर सकते हैं दो स्थितियों में से एक है:

प्रवेश पृष्ठ लॉगिन लेता है लेकिन वह कहते हैं लॉगिन विफल रहा, हालांकि, जहां तक ​​मैं कह सकता हूं, लॉगिन मेल खाता है।

या मैं इस त्रुटि मिलती है: multimethod में कोई विधि '-> एसक्यूएल' प्रेषण मूल्य के लिए: अशक्त

मुझे यकीन है कि कैसे उपरोक्त त्रुटि व्याख्या करने के लिए नहीं कर रहा हूँ: यह निर्दिष्ट करना मैं एक बहु की जरूरत है -मात्र या यह निर्दिष्ट है कि मुझे शून्य की जांच करने की आवश्यकता है? शून्य आवश्यकता बिल्कुल समझ में नहीं आता है। मैं वास्तव में नहीं पूछ रहा हूं लेकिन अगर कोई स्पष्टीकरण देना चाहता है, तो यह बहुत अच्छा है।

मैंने कच्चे गैर-धुंधले डेटा से परिणाम-से-चुनिंदा प्रश्नों की तुलना करके आउटपुट का परीक्षण किया, मैं इस विषय पर 5 भिन्नताओं के माध्यम से चला गया, पेज-टू-पेज कॉल से सब कुछ नया defpartials, बहु बनाने के लिए -methods, defn, आदि

सूत्रों का कहना है कि मैं का इस्तेमाल किया है (दुर्भाग्य से, मैं उन सभी को एक पहली बार पोस्टर जा रहा है की सूची नहीं कर सकते हैं):

यह एक Clojure का उपयोग करता है -> कोरमा -> PostgreSQL, लेकिन कोड एकाधिक उपयोगकर्ताओं के लिए काम नहीं कर रहा है?
http://www.vijaykiran.com/2012/01/17/web-application-development-with-clojure-part-2/

यह एक कैसे नोयर और PostgreSQL (हाँ, मैं नोयर उपयोग कर रहा हूँ) का उपयोग करने से पता चलता: https://yogthos.net:11794/blog/23-Noir+tutorial+-+part+2

4Clojure साइट है, लेकिन है कि एक CongoMongo उपयोग करता है:

Heroku ट्विटर क्लोन, लेकिन एक व्यक्ति के लिए लॉगिन बनाने के बारे में कोई जिक्र नहीं है, बहुत कम।

मैंने O'Reilly प्रेस से प्रोग्रामिंग क्लोजर भी खरीदा, लेकिन एक बार फिर, लॉग-इन क्षेत्र बनाने के तरीके के बारे में कुछ भी नहीं।

पहला संपादन: मुझे स्टैंड-अलोन साइट का एक जिथब रिपोजिटरी बनाने के लिए कहा गया था। इसमें एक "खाता निर्माण" क्षेत्र शामिल है जो welcome.clj फ़ाइल में मिलता है और login.clj में केवल लॉगिन क्षेत्र का एक रूप शामिल है।

मैं पिछली रात के रूप में काम करने वाली कुछ त्रुटियों को प्राप्त करने का प्रयास कर रहा था और फ़ाइलों को अपलोड करने से पहले यह काम करने का प्रयास भी कर रहा था। मेरे पास अभी तक कोई उचित प्रारंभिक बिंदु नहीं है, इस प्रकार अभी तक कोई प्रारंभिक कार्यान्वयन नहीं है। मैं उन समाधानों पर गंभीरता से शर्मिंदा हूं जिनके साथ मैं आ रहा हूं, इस प्रकार मैं उन्हें पोस्ट नहीं करना चाहता हूं। मुझे अवधारणा मिलती है कि मुझे क्या करना चाहिए, लेकिन किसी कारण से, मैं इसका अनुवाद नहीं कर सकता। यह मेरा पहला गिथब खाता है: मेरी पृष्ठभूमि पाइथन, योजना एला एसआईसीपी है, और कुछ पायथन + पोस्टग्रेएसक्यूएल मार्केटिंग प्रोग्राम मैंने बनाया है।

दूसरा संपादित करें: एएके! मुझे इस बात पर काम करने की प्रतीत नहीं हो रही है ... हाँ, मैंने इस पर 20 मिनट (घंटे) से अधिक समय बिताया है, इसलिए मुझे यह मानना ​​है कि मेरे पास अभी तक पूरा करने के लिए आवश्यक ज्ञान नहीं है इससे कोई फर्क नहीं पड़ता कि मैं कितने स्रोत देखता हूं। मैंने अद्यतन फ़ाइलों और कच्ची एसक्यूएल चलाने के लिए लॉगिन बॉक्स पर सभी बदलावों सहित सभी अजीब चीजों को किया है। निकटतम मैं आ सकता हूं यह प्राप्त कर रहा है ताकि मुझे कोई त्रुटि न हो, लेकिन कोई भी सबूत नहीं है कि कोई लॉग इन है। मदद और सुझावों के लिए बहुत बहुत धन्यवाद।मैं निश्चित रूप से बाद में इस पर वापस आऊंगा।

https://github.com/dt1/noirKormaLogin

+0

यह अपने कोड को देखे बिना संभव नहीं होगा। आप संभवतः कोड को जिथब पर डाल सकते हैं और यहां एक लिंक दे सकते हैं। – Ankur

+0

क्या आपको वास्तव में लॉगिन को लागू करने की आवश्यकता है? कंटेनर में जेएसएसई प्रमाणीकरण का उपयोग करने पर विचार करें (मान लें कि आप एक कंटेनर के भीतर चल रहे हैं), या एसएएसएल का उपयोग कर। कुछ और आपके लिए पासवर्ड जुगलिंग को संभालने दें और कंटेनर से प्रमाणित प्रमाण-पत्र स्वीकार करें। –

+3

इसके अलावा, यदि आप पासवर्ड संग्रहीत कर रहे हैं, तो कृपया सुनिश्चित करें कि वे ठीक से नमकीन हैंश हैं। कभी भी अनएन्क्रिप्टेड सादा पाठ पासवर्ड स्टोर न करें, और यदि संभव हो तो एन्क्रिप्टेड पासवर्ड को बिल्कुल स्टोर न करें, केवल नमकीन हैंश का उपयोग आप यह सत्यापित करने के लिए कर सकते हैं कि उपयोगकर्ता सही पासवर्ड जानता है। –

उत्तर

3

मुद्दों है कि मैं देख रहा हूँ के एक जोड़े हैं। सबसे पहले, datapass.clj में, आप कोई सामग्री नहीं बना रहे हैं। मुझे यकीन नहीं है कि कैसे कोर्मा इसे संभालता है। यह थ्रेड परिणामों को अन्य कार्यों में इनपुट के रूप में करने का प्रयास कर रहा है, इसलिए मैं देख सकता हूं कि nil वहां कैसे पेश किया जाता है।

दूसरा, आपको लॉगिन पोस्ट को संभालने के लिए कुछ चाहिए। (defpage ...) केवल डिफ़ॉल्ट रूप से GET अनुरोधों को संभालता है। पोस्ट को संभालने के लिए आपको एक अलग defpage की आवश्यकता होगी। इन पंक्तियों के साथ कुछ:

(defpage [:post "/login"] {:keys [user-name pwd]} 
    (if-let [user (db/find-user user)] 
    (if (noir.util.crypt/compare pwd (:password user)) 
     (do 
     (noir.session/put! :some-key some-value) 
     (noir.response/redirect "/success")) 
     noir.response/redirect "/failed-to-login")) 
    (noir.response/redirect "/failed-to-login")) 

session/put! कैसे आप सत्र में डेटा डाल है। इन-मेमोरी स्टोर का उपयोग करना डिफ़ॉल्ट है। persistent sessions (सत्र स्टोर देखें) का उपयोग करने के लिए आपको रिंग मिडलवेयर जोड़ने की आवश्यकता होगी।

इसके अलावा, जैसा भाग्य होता है, किसी को सिर्फ एक प्रमाणीकरण एप्लिकेशन नोयर के लिए तैनात ... आप एक बार देख ले सकते हैं: https://github.com/xavi/noir-auth-app