如何从Yesod持久性数据库中的Sqllite中提取值

时间:2019-06-15 06:21:58

标签: haskell yesod

我第一次使用Yesod,我尝试了脚手架网站,进行了一些小的更改,就可以实现googleOauth,从google和一些用户信息中获取了uid,然后将它们保存到sqlite数据库中。这是身份验证用来验证的日志,仅供参考

SELECT "id","ident","email","name","picture" FROM "user" WHERE "ident"=?; [PersistText "google-uid:11111111111"]

我的用户模型的定义如下

User
    ident Text
    email Text
    name Text
    picture Text
    UniqueUser ident
    deriving Typeable

在随后的处理中,我想使用从Google收到的ID查询数据库,以提取电子邮件,名称和图片。我试着这样写

maid <- maybeAuthId
    let user = selectList [userIdent ==. maid] []

但这给了我以下错误

Couldn't match expected type ‘EntityField record (Maybe UserId)’
                      with actual type ‘User -> Text’

我该如何解决?

1 个答案:

答案 0 :(得分:1)

第一个问题是maybeAuthId可能失败,您必须检查一下:

maid <- maybeAuthId
case maid of
  Just id_ -> selectList ...
  _ -> do something in case of unaothorized user

第二个问题很简单-在内部持久性函数中使用时,您必须在实体和字段名上打上底线

selectList [UserIdent ==. id_] []