0

Web アプリにフレンド認証を実装しようとしていますが、ログインしようとすると */login?&login_failed=Y&username=*...my param is empty and I can't login.何が間違っているのでしょうか?

これらは私のルートです...

(defroutes routes

(GET "/" [] (index))
(GET "/indexMessage" [] (indexMessage))
(GET "/login" req (index))

(POST "/insert-user" {params :params}
   (let [firstname (get params "firstname")
         lastname (get params "lastname")
         email (get params "email")
         password (get params "password")
         sex (get params "sex")
         year (get params "year")
         month (get params "month")
         day (get params "day")]
     (def date (str year"-"month"-"day))
     (insert-user firstname lastname email password sex date)))

(route/resources "/public")
(route/not-found "Page not found")
)

必要なすべてのミドルウェアを使用しました...

(def page (handler/site
        (friend/authenticate
          routes
          {:allow-anon? true
           :login-uri "/login"
           :default-landing-uri "/"
           :unauthorized-handler #(-> (html5 [:h2 "You do not have sufficient privileges to access " (:uri %)])
                                    resp/response
                                    (resp/status 401))
           :credential-fn #(creds/bcrypt-credential-fn @users %)
           :workflows [(workflows/interactive-form)]})
           (wrap-keyword-params routes)
           (wrap-nested-params routes)
           (wrap-params routes)
           (wrap-session routes)


        ))

そして、これが私のjettyサーバーの起動方法です...

(defn -main []
(run-jetty page {:port 8080 :join? false}))

ユーザーはこのようなマップです...

 {"username" {:username "username" :password "password"}}

:roles はマップで必須ですか?それが原因でしょうか?

4

1 に答える 1

1

私もFriendにはかなり慣れていませんが、Friendのソースコードから、POSTリクエストのパラメータ名が重要であると言えます。この例に従っていると思いますが、そうでない場合は、実際に得られる最良のヒントです。フォーム フィールドの名前に注意してください

https://github.com/cemerick/friend-demo/blob/master/src/clj/cemerick/friend_demo/interactive_form.clj#L22-l24

すべての資格情報関数は、利用可能な資格情報を含むマップである単一の引数を取ります。そのため、明示的な POST "/login" ルートがないため、ここに示すように、フレンド ミドルウェアはそれらを取得して、資格情報-fn の資格情報として使用しますhttps:// github.com/cemerick/friend/blob/master/src/cemerick/friend/workflows.clj#L76-78

したがって、「username」と「password」は、:login-uri に POST されるパラメーターの名前である必要があります。

その例がここで実行可能な新規参入者のためにhttp://friend-demo.herokuapp.com/interactive-form/

于 2014-01-20T01:20:31.827 に答える