Как извлечь значения из Sqllite в Yesod персистентный - PullRequest
1 голос
/ 15 июня 2019

Я использую Yesod в первый раз, я опробовал веб-сайт scaffolded, с некоторыми незначительными изменениями, которые я смог реализовать googleOauth, я получаю uid от google и некоторую информацию о пользователе, затем сохраняю их в базу данных 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, чтобы извлечь адрес электронной почты, имя и изображение.Я пытался написать что-то вроде этого

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

Но это дает мне следующую ошибку

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

Как я могу это исправить?

1 Ответ

1 голос
/ 15 июня 2019

Первая проблема в том, что maybeAuthId может потерпеть неудачу, и вы должны проверить это:

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

И вторая проблема проста - вам нужно перебивать имена сущностей и полей при использовании внутри постоянных функций:

selectList [UserIdent ==. id_] []
...