我正在运行LuminusWeb项目,我想配置Friend来授权路由。这样做的问题在于,朋友必须像下面那样配置环服务器:
(def page (handler/site
(friend/authenticate
routes
...
;--- elsewhere ---
(compojure/defroutes routes
(GET "/" req
但是,在LuminusWeb's handler中,路线都遍布各个地方,它拥有自己的视图和模型,所以处理程序几乎没有所有路线。但是,所有分散的路由都是使用配置声明的。这是来自LuminusWeb:
(def app (app-handler
;; add your application routes here
[home-routes app-routes]
...
作为初学者,我对clojure的理解有限,我不知道如何在这个地方配置Friend
。我试图查看朋友的文档,但除了readme和friend-demo apps之外没有任何其他内容,所有演示应用都使用相同的配置。
我已经设置了一个非常basic project on github,其中只有luminusweb和整合的朋友的骨头。
我盲目地将Friend的配置插入到不同(且明智的)的位置,直到我摆脱了所有的编译时错误,但项目仍然没有因为某种原因而运行(导致运行时错误) )。
所以,问题是,当我的路由分散在不同的命名空间中并且我没有处理程序/站点方法时,我应该在哪里配置朋友?
谢谢。
答案 0 :(得分:3)
前几天我遇到了同样的问题,我就这样解决了。
在我的handler.clj文件中,我定义了这样的路由:
(def secured-routes
[(friend/authenticate user-routes user/friend-settings)
(friend/authenticate epics-routes user/friend-settings)
home-routes app-routes])
正如您所看到的,其中一些是安全的,一些则不是。然后,在app函数中我称之为:
(def app
(app-handler
;; add your application routes here
secured-routes
;; instead of [user-routes home-routes ...]
...))
<强>更新强> 是的,确切地说,这就是我的朋友设置的样子:
(def friend-settings
{:credential-fn (partial creds/bcrypt-credential-fn login-user)
:workflows [(workflows/interactive-form)]
:login-uri "/user/login"
:unauthorized-redirect-uri "/user/login"
:default-landing-uri "/"})
其中 login-user 是一个连接到datomic并读取用户/密码映射的函数。
您可以查看以下代码:https://github.com/sveri/friend-ui/ 但请注意,我自己就是一名初学者,而且那里的代码肯定远非惯用或遵循最佳实践。
答案 1 :(得分:1)
如果示例中的app
是环处理程序,那么您可以将其传递到friend/authenticate
中间件,就像任何其他环处理程序函数一样。只需确保在compojure.handler/site
之后/之外添加朋友需要的Ring中间件(体现在friend/authenticate
中,但您可以直接添加,如果您愿意)。