2012-08-26 13 views
6

Oluşturduğum bir Clojure sitesi için (giriş yapmak için) giriş alanıyla başlayacağım yere tamamen takıldım.Clojure/Korma/PostgreSQL sitesi için bir Kullanıcı Girişi Oluşturma girişiminde bulunma

Ben acımasızca aşağıya sonrası kopya alacağımız bazı kaynaklar,/yapıştırılan kod baktım ve ben alabilirim en yakın iki durumlardan biridir:

giriş sayfası oturumu sürer ancak söylüyor giriş yapamadım, söyleyebileceğim kadarıyla, giriş eşleşiyor.

Veya bu hatayı alıyorum: multimethod yok metod '-> sql' sevk değeri: Yukarıdaki hata yorumlamak nasıl emin değilim

boş: Ben çok ihtiyacım bu belirttiğini -method mu yoksa neyi kontrol etmem gerektiğini mi belirliyor? Boş gereklilik hiç mantıklı değil. Gerçekten sormuyorum ama kimse bir açıklama yapmak isterse, bu harika.

Verileri, ham olmayan karma verilerden sonuçları seçmek için yapılan sorguları karşılaştırarak test ettim, sayfadan sayfa çağrılarına, yeni hata ayıklamalarının oluşturulmasına kadar herşeyi kullanarak, bu temada 5 varyasyondan geçtim. -Kullanılan, defn vb ben kullandım

Kaynaklar (ne yazık ki, hepsi ilk kez posteri olmanın sayamayacağım):

Bu seferki Clojure kullanır -> Korma -> PostgreSQL, ancak Kod birden çok kullanıcı için çalışmıyor gibi görünüyor mu?
http://www.vijaykiran.com/2012/01/17/web-application-development-with-clojure-part-2/

Bu seferki Noir ve PostgreSQL (Evet, Noir kullanıyorum) nasıl kullanılacağı gösterilmektedir: https://yogthos.net:11794/blog/23-Noir+tutorial+-+part+2

4Clojure sitesi, ancak bir congomong kullanır:

Heroku Heyecan klonu, Ancak, bir kişi için girişlerin nasıl oluşturulacağı hakkında çok az bir şey yok.

Ayrıca O'Reilly Press'ten Programlama Clojure'ı satın aldım, ancak bir kez daha oturum açma alanı oluşturma hakkında hiçbir şey.

İLK DÜZENLEME: Tek başına bir sitenin bir github deposu oluşturması istendi. Bu welcome.clj dosyasında bulunan bir giriş "Hesap Oluşturma" alanı ve login.clj içinde sadece Giriş alanı bir formunu içerir.

Dün gece yaptığım gibi aynı hatalardan bazılarını almayı denedim ve dosyaları yüklemeden önce bu çalışmayı yapmayı denedim. Henüz makul bir başlangıç ​​noktam yok, dolayısıyla henüz bir başlangıç ​​uygulaması yok. Geldiğim çözümlerde ciddi şekilde utandım, bu yüzden onları göndermek istemiyorum. Kavramsal olarak ne yapmalıyım, ama bir sebepten dolayı bunu tercüme edemiyorum. Bu benim ilk github hesabım: arka planım Python, Scheme a'la SICP ve oluşturduğum bazı Python + PostgreSQL pazarlama programı.

SECOND EDIT: Ack! İşe yaramayacak bir şey göremiyorum ... Evet, bunun üzerinde 20 dakikadan fazla zaman harcadım, bu yüzden henüz başarmak için gerekli bilgiye sahip olmadığımı itiraf etmeliyim. Bu, kaç tane kaynak olduğuna bakılmaksızın. Güncelleştirilmiş dosyaları ve çalıştığım tüm tuhaf şeyleri, ham SQL'i çalıştırmak için giriş kutusundaki tüm varyasyonları da dahil olmak üzere taahhüt ettim. Gelebileceğim en yakın şey, herhangi bir hata almamaya çalışmaktır, ancak hiç birinin giriş yapmamış olduğuna dair hiçbir kanıt yok. Yardım ve önerileriniz için çok teşekkürler.Kesinlikle daha sonra buna geri döneceğim.

https://github.com/dt1/noirKormaLogin

+0

Bu sizin koduna bakmadan mümkün olmazdı: şans olurdu olarak

Ayrıca, birisi sadece bir göz atmak isteyebilirsiniz ... Noir için bir kimlik doğrulama uygulaması yayınlanmıştır. Muhtemelen kodu github'a koyabilir ve buraya bir link verebilirsin. – Ankur

+0

Giriş bilgilerini kendiniz uygulamanız gerekiyor mu? Kapsayıcıda JSSE kimlik doğrulamasını kullanmayı düşünün (bir kapta çalıştığınızı varsayarak) veya SASL'yi kullanın. Başka bir şeyin sizin için şifre dönüşümü yapmasına izin verin ve kapsayıcıdan kimlik bilgilerini doğrulayın. –

+3

Ayrıca, şifreler saklıyorsanız, lütfen uygun tuzlanmış karma olduklarından emin olun. Şifrelenmemiş düz metin şifrelerini asla saklamayın ve şifreli şifreleri saklamayın. Kullanıcıların doğru şifreyi bildiğini doğrulamak için sadece tuzlanmış karmaları kullanabilirsiniz. –

cevap

3

gördüğüm sorunların bir çift vardır. İlk olarak, datapass.clj’da, içeriği olmayan bir varlık oluşturuyorsunuz. Korma'nın bunu nasıl idare ettiğinden emin değilim. Sonuçları diğer işlevlere girdi olarak yorumlamaya çalışıyor, böylece nil'un oraya nasıl girildiğini görebiliyordum.

İkincisi, oturum açma iletisini işlemek için bir şeye ihtiyacınız olacak. (defpage ...) yalnızca GET isteklerini varsayılan olarak işler. Gönderiyi işlemek için ayrı bir defpage'a ihtiyacınız olacak. Bu doğrultuda bir şey:

(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! oturumdan veri koymak nasıl. Varsayılan, bir bellek deposunu kullanmaktır. persistent sessions'u kullanmak için Zil ara katmanını eklemeniz gerekir (Oturum Mağazalarına bakın). https://github.com/xavi/noir-auth-app

İlgili konular