如何使用friend和bidi来包装资源处理程序?用bidi包装资源处理程序
我已经成功地让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
"[email protected]"]}
;correct
(match-route routes "/index.html")
=>
nil
;not correct
我想我路由模式[true (resources {:prefix "public/"})]
的匹配部分是错误的,因为当我将其更改为:key
时,'index.html'确实匹配。
如何将非/ dev/*路线与公共资源相匹配?
谢谢你看看这个问题。我现在注意到我的代码甚至不能用于开发/处理程序,或者至少不一致。我想我现在会转换成compojure。我也对为什么我的(文件响应)和(资源响应)让我的浏览器下载响应而不是在浏览器中加载它们感到困惑。 – bbs
是的,可悲的是没有太多的例子可以遵循......悲伤,因为它似乎是一个伟大的想法,但使它在真实情况下工作是艰难的。浏览器下载文件通常表示未设置内容类型标题(因为缺少中间件或处理程序未返回响应)。 –