Haskell 是根据应用程序设置进行硬编码身份验证
我正在尝试将硬编码身份验证设置为依赖于来自Yesod数据库的Haskell 是根据应用程序设置进行硬编码身份验证,haskell,monads,yesod,Haskell,Monads,Yesod,我正在尝试将硬编码身份验证设置为依赖于来自Yesod数据库的config/settings.yml中指定的登录信息。我编写了以下代码: instance YesodAuthHardcoded App where validatePassword u = do app <- getYesod let user = appUser $ appSettings app return . validPassword user u . from
config/settings.yml
中指定的登录信息。我编写了以下代码:
instance YesodAuthHardcoded App where
validatePassword u = do
app <- getYesod
let user = appUser $ appSettings app
return . validPassword user u . fromString . unpack
doesUserNameExist = do
app <- getYesod
return . isJust . lookupUser app
的原型验证密码
:
和AuthHandler
:
最后getYesod
:
从这些定义看来,应该有一种方法可以让我从AuthHandler
monad调用getYesod
,但我不知道如何调用
编辑: 我已将
yesod
及其支架更新为最新版本。我还修改了validatePassword
,如下所示:
validatePassword u = do
app <- liftHandler . getYesod
let user = appUser $ appSettings app
return . validPassword user u . fromString . unpack
validatePassword u=do
app错误源于我试图修改Yesod.Auth.Hardcoded
模块给出的代码段。我引入了一个与省略的参数冲突的do
符号。指定参数可以解决问题,代码将变为:
instance YesodAuthHardcoded App where
validatePassword u p = do
app <- getYesod
let user = appUser $ appSettings app
return . validPassword user u . fromString $ unpack p
doesUserNameExist u = do
app <- getYesod
return . isJust $ lookupUser app u
实例YesDouthHardcoded应用程序,其中
验证密码u p=do
我怀疑你需要在某处插入liftHandler
或liftSubHandler
。
type MonadAuthHandler master m = (MonadHandler m, YesodAuth master, master ~ HandlerSite m, Auth ~ SubHandlerSite m, MonadUnliftIO m)
type AuthHandler master a = forall m. MonadAuthHandler master m => m a
getYesod :: MonadHandler m => m (HandlerSite m)
validatePassword u = do
app <- liftHandler . getYesod
let user = appUser $ appSettings app
return . validPassword user u . fromString . unpack
• Couldn't match type ‘m1 a1’ with ‘App’
Expected type: HandlerFor (HandlerSite m1) a1 -> App
Actual type: HandlerFor (HandlerSite m1) a1 -> m1 a1
• In the first argument of ‘(.)’, namely ‘liftHandler’
In a stmt of a 'do' block: app <- liftHandler . getYesod
In the expression:
do app <- liftHandler . getYesod
let user = appUser $ appSettings app
return . validPassword user u . fromString . unpack
|
259 | app <- liftHandler . getYesod
|
instance YesodAuthHardcoded App where
validatePassword u p = do
app <- getYesod
let user = appUser $ appSettings app
return . validPassword user u . fromString $ unpack p
doesUserNameExist u = do
app <- getYesod
return . isJust $ lookupUser app u