首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在hamlet模板中使用Yesod.Auth.Hardcoded SiteAdmin

在hamlet模板中使用Yesod.Auth.Hardcoded SiteAdmin
EN

Stack Overflow用户
提问于 2016-07-26 06:47:55
回答 2查看 66关注 0票数 0

问题描述

我一直无法获得使用Yesod.Auth.Hardcoded的编译示例。我的问题是试图在一个hamlet模板中询问用户。我的Foundation.hs是按照硬编码链接中的文档设置的。我的处理程序看起来像这样:

代码语言:javascript
复制
getHomeR :: Handler Html
getHomeR = do
    uid <- maybeAuthId
    (widget, enctype) <- generateFormPost . renderBootstrap3 BootstrapBasicForm $ blurbForm Nothing
    currentPost <- runDB $ selectFirst [] [Desc BlogId]
    currentBlurb <- runDB $ selectFirst [] [Desc BlurbId]
    defaultLayout $ do
        setTitle "My site"
        addScriptRemote "https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"
        addScriptRemote "https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.2.0/js/collapse.js"
        $(widgetFile "homepage")

我的站点会愉快地进行编译和渲染,直到我尝试对上面的do块中分配的uid执行任何有用的操作。

我尝试过的

我已经在hamlet documentation中尝试了$maybe$case结构。$maybe看起来像这样:

代码语言:javascript
复制
    $maybe user <- uid
       <p>There's a name
    $nothing
       <p>No name

无论我是否以硬编码用户身份登录,此操作都会成功。

$case版本如下所示:

代码语言:javascript
复制
    $case uid
        $of Left _
            <p>There's no name
        $of Right username
            <p>It worked

并失败,出现以下错误:

代码语言:javascript
复制
Exception when trying to run compile-time code:
  Inside a $case there may only be $of.  Use '$of _' for a wildcard.
Code: widgetFile "homepage"
In the splice: $(widgetFile "homepage")

问题

我是否在处理程序代码中正确设置了uid,如果正确,我应该如何访问模板中的硬编码SiteManager

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-07-26 07:13:01

正如经常发布的问题一样,我会想到一个答案,尽管我仍然会对任何更好的答案心存感激。使用$maybe$case的组合如下所示:

代码语言:javascript
复制
    $maybe user <- uid
        $case user
            $of Left _
                <p>There's no name
            $of Right username
                <p>There might be a name of #{username}
    $nothing
       <p>No name

给了我正确的用户名。如果有更好的方法,请发布另一个答案。

票数 1
EN

Stack Overflow用户

发布于 2016-07-26 08:19:15

这里的AuthId类型是Either UserId String

右值表示未出现在用户表中的“硬编码”用户。左值表示Users表中的用户行。

如果想要显示AuthId的名称,可以调用返回Either User SiteManagergetAuthEntity,然后按如下方式处理:

代码语言:javascript
复制
getUserName :: Either User SiteManager -> String
getUserName (Left user) = ...get the name field from user...
getUserName (Right sitemgr) = manUserName sitemgr
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38578541

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档