我一直在尝试使用Yesod,我遇到了一个非常简单的问题,我似乎无法找到解决方案。
假设我想要一个全局函数,它在每个请求上运行,与路由或处理程序无关(例如身份验证函数)。说我想要像
这样的东西 uid <- requireAuthId
在每个处理函数之前运行,并在提供uid时将控制权返回给处理函数/如果它已经存在
我会把它放在哪里?什么是Yesod Way&#39;在过滤器之前做什么?
答案 0 :(得分:2)
执行此操作的一种方法是修改您的基础类型的Yesod实例。假设您的基础类型称为App,您可以执行以下操作以在调用任何其他处理程序之前强制授权。
instance Yesod App where --the following lines are somewhere within this block.
isAuthorized (AuthR LoginR) _ = return Authorized -- You don't want to accidentally lose access to the login page!
isAuthorized _ _ = do
mauth <- maybeAuth
case mauth of
Just _ -> return Authorized
Nothing -> return $ Unauthorized "You must login first."
显然,编辑它以满足您的需求,但它应该让您知道如何执行此操作。