3

フレンドとビディを使用してリソース ハンドラーをラップするにはどうすればよいですか?

ルートを認証するためにoAuthを取得することに成功しました:

(defn auth-handler [request] (friend/authorize #{::user}
                                               {:status 200
                                                :body   "a secret"}))

(def routes ["/" {true auth-handler}])

(def app (make-handler routes))

(web/run-dmc (-> app
                   var
                   (friend/authenticate
                     {:allow-anon? true
                      :workflows   [(oauth/workflow
                                      {:client-config client-config
                                       :uri-config    uri-config
                                       :credential-fn credential-fn})]})
                   (wrap-resource "public")
                   (wrap-defaults site-defaults)
                   ))

これは「/」ルートで機能しますが、最初に認証しないとアクセスできないリソースがあることを確認したいと思います。

それは関数で可能であるようfriend/wrap-authorizeです:

私の最も近い試みは、認証ラップされたルートで機能しますが、非 /dev/ ルートでは一致しません:

(def routes ["/" [["dev/" [[true (friend/wrap-authorize (resources {:prefix "dev/"}) #{::user})]]]
                  [true (resources {:prefix "public/"})]]])


(match-route routes "/dev/index.html")
=>
{:handler #object[cemerick.friend$wrap_authorize$fn__24411
              0x2400d0be
              "cemerick.friend$wrap_authorize$fn__24411@2400d0be"]}
;correct

(match-route routes "/index.html")
=>
nil
;not correct

Route パターンの Matched 部分[true (resources {:prefix "public/"})]が間違っていると思います:key

非 /dev/* ルートをパブリック リソースに一致させるにはどうすればよいですか?

4

1 に答える 1

3

ここでの主な問題は、リソース ルートが

["" (resources {:prefix "public/"})]

の代わりに空の文字列true

ドキュメントには次のように記載されています。パターンが一致した後、パスの残りの部分が指定されたプレフィックスに追加されます。

しかし、率直に言って、これはかなり驚くべき行動だと思います。

ここで、/index.html https://github.com/timothypratley/bidi-resourcesを正常にルーティングする最小限のサンプル プロジェクトを作成しました 。

特に、/index.html2 を要求すると例外が発生しますが、これもまったく予想していませんでした。私は404を期待していました.o_O

私はClojureScriptのbidiが本当に好きですが、これまでのところサーバー側での困難なスローグを見つけています.なぜtrueうまくいかないのかを知る方法は、入力を出力した私自身のバージョンでResources定義を上書きすることです. 、そしてそれ:remainderが空であることがわかりました。

于 2016-03-09T04:46:24.723 に答える