相当于Yesod中的全局“before_filter”

时间:2014-04-21 09:17:38

标签: authentication haskell yesod

我一直在尝试使用Yesod,我遇到了一个非常简单的问题,我似乎无法找到解决方案。

假设我想要一个全局函数,它在每个请求上运行,与路由或处理程序无关(例如身份验证函数)。说我想要像

这样的东西
   uid <- requireAuthId

在每个处理函数之前运行,并在提供uid时将控制权返回给处理函数/如果它已经存在

我会把它放在哪里?什么是Yesod Way&#39;在过滤器之前做什么?

1 个答案:

答案 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."

显然,编辑它以满足您的需求,但它应该让您知道如何执行此操作。