6

私が構築しているClojureサイトのログインエリアを取得することから始めるべき場所に完全に行き詰まっています(楽しみのために)。

以下に投稿するいくつかのリソースを見てきましたが、容赦なくコードをコピー/貼り付けましたが、最も近いのは次の2つの状況のいずれかです。

ログインページはログインを取得しますが、ログインに失敗したと表示されますが、私が知る限り、ログインは一致しています.

または、次のエラーが表示されます: ディスパッチ値のマルチメソッド '->sql' にメソッドがありません: null

上記のエラーを解釈する方法がわかりません。これは、マルチメソッドが必要であることを指定していますか、それとも null をチェックする必要があることを指定していますか? null 要件はまったく意味がありません。私は本当に尋ねているわけではありませんが、誰かが説明をしたいのであれば、それは素晴らしいことです.

未加工のハッシュされていないデータからの結果から選択へのクエリを比較して出力をテストしました。ページ間の呼び出しから新しい defpartials、マルチメソッド、defn の作成まで、すべてを使用して、このテーマで 5 つのバリエーションを試しました。など

私が使用した情報源 (残念ながら、最初のポスターであるすべてをリストすることはできません):

これは Clojure -> Korma -> PostgreSQL を使用していますが、コードは複数のユーザーに対して機能しないようですか?
http://www.vijaykiran.com/2012/01/17/web-application-development-with-clojure-part-2/

これは Noir と PostgreSQL の使用方法を示しています (はい、私は Noir を使用しています): https://yogthos.net:11794/blog/23-Noir+tutorial+-+part+2

4Clojure サイトですが、CongoMongo を使用しています。

Heroku の Twitter クローンですが、1 人、ましてや複数のログインを作成する方法については言及されていません。

O'Reilly Press から Programming Clojure も購入しましたが、やはり、ログイン領域の作成方法については何もありません。

最初の編集:スタンドアロン サイトの github リポジトリを作成するように依頼されました。これには、welcome.clj ファイルにある作業用の「アカウント作成」領域と、login.clj のログイン領域のフォームのみが含まれます。

昨夜と同じエラーのいくつかを機能させようとしていましたが、ファイルをアップロードする前にこれを機能させようとしていました。私はまだ合理的な出発点を持っていないので、まだ最初の実装はありません。私が思いついた解決策に真剣に恥ずかしいので、投稿したくありません。何をすればいいのか概念的にはわかるのですが、なぜか訳せません。これは私の最初の github アカウントです。私のバックグラウンドは Python、Scheme a'la SICP、そして私が構築した Python + PostgreSQL マーケティング プログラムです。

2 番目の編集: Ack! まったく機能しないようです... ええ、これに20分(時間)以上費やしたので、達成するために必要な知識がまだないことを認めなければなりませんこれは、私がいくつの情報源を見ても。更新されたファイルと、ログインボックスのすべてのバリエーションを含め、生のSQLを実行するなど、試したすべての奇妙なことをコミットしました。私ができる最も近いのは、エラーが発生しないようにすることですが、誰かがログインしているという証拠はまったくありません。助けと提案をありがとう。私は間違いなくこれに後で戻ります。

https://github.com/dt1/noirKormaLogin

4

1 に答える 1

3

私が見るいくつかの問題があります。まず、 ではdatapass.clj、コンテンツのないエンティティを作成しています。Korma がそれをどのように処理するかはわかりません。結果を他の関数への入力としてスレッド化しようとしているので、そこにどのよう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!セッションにデータを入れる方法です。デフォルトでは、メモリ内ストアが使用されます。永続的なセッションを使用するには、リング ミドルウェアを追加する必要があります(セッション ストアを参照)。

また、運が良ければ、誰かが Noir の認証アプリを投稿したところです

于 2012-08-28T21:18:22.720 に答える