获取当前用户ID时出错

时间:2018-08-20 16:14:39

标签: haskell yesod persistent

我遇到了一个我无法解决的小问题。 Yesod与postgres模板。

我的目标是创建一个以当前uid命名的新目录。

-- model
-- User
     ident Text
--   ...

-- Handler
uploadDirectory :: FilePath
uploadDirectory = "static/docs"

writeToServer :: FileInfo -> Handler FilePath
writeToServer file = do
    let filename = unpack $ fileName file
        filepath = registerFilePath filename
    liftIO $ fileMove file filepath
    return filename

registerFilePath :: String -> FilePath
registerFilePath f = do
    (_,muser) <- requireAuthPair
    uploadDirectory </> showText (userIdent muser) </> f

我得到:

*"Couldn't match type ‘AuthEntity (HandlerSite [])’ with ‘User’
Expected type: [(AuthId (HandlerSite []), User)]
Actual type: [(AuthId (HandlerSite []), AuthEntity (HandlerSite []))]"*

似乎调用userIdent要求muser的类型为“用户”。 但是requireAuthPair返回AuthEntity(HandlerSite [])。

我猜未针对这种情况定义requireAuthPair。有帮助吗?

您忠实的 费利佩·阿尔戈洛

PS:我没有更改postgres模板身份验证设置。 我首先要进行伪认证测试

1 个答案:

答案 0 :(得分:1)

特别关注:

registerFilePath :: String -> FilePath
registerFilePath f = do
    (_,muser) <- requireAuthPair
    uploadDirectory </> showText (userIdent muser) </> f

此类型的签名看起来不正确。您说的是返回的是 pure FilePath值,但实际上应该将其包装成某种单子类型,例如String -> Handler FilePath。您还可能需要在return $之前添加uploadDirectory