2016-05-11 2 views
2

私は、要求されたユーザキーの存在を確認して、ユーザが認証されているかどうかをチェックするカスタムミドルウェアを作成しようとしています。Compojureでチェーンをバイパスしているカスタムミドルウェア

(defn wrap-authenticated [handler] 
    (fn [{user :user :as req}] 
    (if (nil? user) 
     (do 
     (println "unauthorized") 
     {:status 401 :body "Unauthorized." :headers {:content-type "text/text"}}) 
     (handler req)))) 

(def app 
    (wrap-authenticated (wrap-defaults app-routes (assoc site-defaults :security false)))) 

しかし、私は401のステータスで応答HashMapを返すようにしようとすると、私は次の例外を取得: はWARN:oejs.AbstractHttpConnectionを:/メイン とjava.lang.ClassCastException:clojure.lang.Keywordをキャストすることはできませんがto java.lang.String

おそらく、Compojureミドルウェア内で実装する必要があるロジックを理解できません。 ミドルウェアを作成してミドルウェアチェーンを壊し、カスタムレスポンスを返すか、ハンドラにリダイレクトする方法を教えてください。

答えて

6

キーは文字列であると予想され、あなたは:content-typeというキーワードを使用しているので、間違いは:headersマップにあると思います。これを代わりに試してみてください:

{"Content-Type" "text/html"} 
+1

私はこのような間違いを犯したと信じられません:\ありがとうございます –

関連する問題