我第一次使用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’
我该如何解决?
答案 0 :(得分:1)
第一个问题是maybeAuthId
可能失败,您必须检查一下:
maid <- maybeAuthId
case maid of
Just id_ -> selectList ...
_ -> do something in case of unaothorized user
第二个问题很简单-在内部持久性函数中使用时,您必须在实体和字段名上打上底线
selectList [UserIdent ==. id_] []