4

我正在玩脚手架网站,我想在用户第一次使用 OpenID 或 Google 帐户登录后将其发送到注册页面。

我想出了这个:

getAuthId creds = runDB $ do
        x ←  getBy $ UniqueUser $ credsIdent creds
        case x of
            Just (Entity uid _) → return $ Just uid
            Nothing → do
                return $ Just $ Key (PersistInt64 0)

HomeR处理程序中,我检查 UserId 值,在为零的情况下显示注册表单。

这种方法有效,但似乎很老套。处理此类问题的正确方法是什么?

4

1 回答 1

7

我建议将信息分成两个实体:一个User跟踪用户凭据的Profile实体,一个包含注册信息的实体。例如:

User
    ident Text
    UniqueUser ident
Profile
    user UserId
    displayName Text
    UniqueProfile user

getAuthId中,您将返回一个现有的UserId,或者如果一个不存在,则创建一个新条目。在HomeR中,您将得到是否有Profile( getBy $ UniqueProfile uid),如果没有,则显示注册表单。

于 2012-08-01T17:19:28.683 回答