在小村庄模板中使用 Yesod.Auth.Hardcoded SiteAdmin
Using Yesod.Auth.Hardcoded SiteAdmin in a hamlet template
问题描述
我无法获得使用 Yesod.Auth.Hardcoded 的编译示例。我的问题是试图在小村庄模板中询问用户。我的 Foundation.hs
是根据 link 中的文档进行硬编码设置的。我的处理程序如下所示:
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
看起来像这样:
$maybe user <- uid
<p>There's a name
$nothing
<p>No name
无论我是否以硬编码用户身份登录,都成功了。
$case
版本如下所示:
$case uid
$of Left _
<p>There's no name
$of Right username
<p>It worked
失败:
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
?
经常 post 这个问题让我想到了一个答案,尽管我仍然会感激任何更好的答案。像这样使用 $maybe
和 $case
的组合:
$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
帮我找到了正确的用户名。如果有更好的方法,请post另一个答案。
这里的AuthId类型是Either UserId String
.
一个Right值表示一个"hardcoded"用户没有出现在Usertable中。 Left 值表示 Users table.
中的 User 行
如果要显示 AuthId 的名称,可以调用 getAuthEntity
其中 returns 和 Either User SiteManager
然后像这样处理它:
getUserName :: Either User SiteManager -> String
getUserName (Left user) = ...get the name field from user...
getUserName (Right sitemgr) = manUserName sitemgr
问题描述
我无法获得使用 Yesod.Auth.Hardcoded 的编译示例。我的问题是试图在小村庄模板中询问用户。我的 Foundation.hs
是根据 link 中的文档进行硬编码设置的。我的处理程序如下所示:
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
看起来像这样:
$maybe user <- uid
<p>There's a name
$nothing
<p>No name
无论我是否以硬编码用户身份登录,都成功了。
$case
版本如下所示:
$case uid
$of Left _
<p>There's no name
$of Right username
<p>It worked
失败:
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
?
经常 post 这个问题让我想到了一个答案,尽管我仍然会感激任何更好的答案。像这样使用 $maybe
和 $case
的组合:
$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
帮我找到了正确的用户名。如果有更好的方法,请post另一个答案。
这里的AuthId类型是Either UserId String
.
一个Right值表示一个"hardcoded"用户没有出现在Usertable中。 Left 值表示 Users table.
中的 User 行如果要显示 AuthId 的名称,可以调用 getAuthEntity
其中 returns 和 Either User SiteManager
然后像这样处理它:
getUserName :: Either User SiteManager -> String
getUserName (Left user) = ...get the name field from user...
getUserName (Right sitemgr) = manUserName sitemgr