我在 Yesod、Auth-HashDB 和 PostgreSQL 上的网络应用程序拒绝编译——无法将类型“AuthEntity App”与“User”匹配
My web app on Yesod, Auth-HashDB, and PostgreSQL refuses to compile -- Couldn't match type ‘AuthEntity App’ with ‘User’
我一直在努力给自己上 Yesod 的速成班,但我似乎无法弄清楚我在这里做错了什么。这可能是概念上的失败,但我或多或少地复制粘贴了 HashDB 的各种简短介绍中可用的代码,试图制作散列数据库身份验证系统,但没有成功。
Foundation.hs:136:23:
Couldn't match type ‘AuthEntity App’ with ‘User’
In the expression: getAuthIdHashDB AuthR (Just . UniqueUser) creds
In an equation for ‘getAuthId’:
getAuthId creds = getAuthIdHashDB AuthR (Just . UniqueUser) creds
In the instance declaration for ‘YesodAuth App’
来自每个相关的代码段:
config/models:
User
name Text
password Text Maybe
UniqueUser name
Model.hs:
import Yesod.Auth.HashDB (HashDBUser, userPasswordHash, setPasswordHash)
import Database.Persist.Quasi (lowerCaseSettings)
...
share [mkPersist sqlSettings, mkMigrate "migrateAll"]
$(persistFileWith lowerCaseSettings "config/models")
instance HashDBUser User where
userPasswordHash = userPassword
setPasswordHash h u = u { userPassword = Just h }
Foundations.hs:
...
import Yesod.Auth
import Yesod.Auth.HashDB (authHashDBWithForm, getAuthIdHashDB, authHashDB)
import Yesod.Auth.Message (AuthMessage (InvalidLogin))
...
instance YesodAuth App where
type AuthId App = UserId
loginDest _ = HomeR
logoutDest _ = HomeR
redirectToReferer _ = True
authPlugins _ = [ authHashDB (Just . UniqueUser) ]
getAuthId creds = getAuthIdHashDB AuthR (Just . UniqueUser) creds
authHttpManager = getHttpManager
如有任何帮助,我们将不胜感激。我对 Haskell 还是有些厌恶,所以这也是我对它的速成课程的尝试。
这通常意味着您没有 AuthEntity
associated type declared, which in turn means that you don't have a YesodAuthPersist
实例。在您的情况下,这可能只是:
instance YesodAuthPersist App where
type AuthEntity App = User
这是由 Yesod 脚手架提供的。
我一直在努力给自己上 Yesod 的速成班,但我似乎无法弄清楚我在这里做错了什么。这可能是概念上的失败,但我或多或少地复制粘贴了 HashDB 的各种简短介绍中可用的代码,试图制作散列数据库身份验证系统,但没有成功。
Foundation.hs:136:23:
Couldn't match type ‘AuthEntity App’ with ‘User’
In the expression: getAuthIdHashDB AuthR (Just . UniqueUser) creds
In an equation for ‘getAuthId’:
getAuthId creds = getAuthIdHashDB AuthR (Just . UniqueUser) creds
In the instance declaration for ‘YesodAuth App’
来自每个相关的代码段:
config/models:
User
name Text
password Text Maybe
UniqueUser name
Model.hs:
import Yesod.Auth.HashDB (HashDBUser, userPasswordHash, setPasswordHash)
import Database.Persist.Quasi (lowerCaseSettings)
...
share [mkPersist sqlSettings, mkMigrate "migrateAll"]
$(persistFileWith lowerCaseSettings "config/models")
instance HashDBUser User where
userPasswordHash = userPassword
setPasswordHash h u = u { userPassword = Just h }
Foundations.hs:
...
import Yesod.Auth
import Yesod.Auth.HashDB (authHashDBWithForm, getAuthIdHashDB, authHashDB)
import Yesod.Auth.Message (AuthMessage (InvalidLogin))
...
instance YesodAuth App where
type AuthId App = UserId
loginDest _ = HomeR
logoutDest _ = HomeR
redirectToReferer _ = True
authPlugins _ = [ authHashDB (Just . UniqueUser) ]
getAuthId creds = getAuthIdHashDB AuthR (Just . UniqueUser) creds
authHttpManager = getHttpManager
如有任何帮助,我们将不胜感激。我对 Haskell 还是有些厌恶,所以这也是我对它的速成课程的尝试。
这通常意味着您没有 AuthEntity
associated type declared, which in turn means that you don't have a YesodAuthPersist
实例。在您的情况下,这可能只是:
instance YesodAuthPersist App where
type AuthEntity App = User
这是由 Yesod 脚手架提供的。