我正在玩脚手架网站,我希望在用户首次使用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值,在零的情况下显示注册表。
这种方法有效,但似乎很苛刻。处理这种问题的正确方法是什么?
答案 0 :(得分:7)
我建议将信息分成两个实体:跟踪用户凭据的User
实体和包含注册信息的Profile
实体。例如:
User
ident Text
UniqueUser ident
Profile
user UserId
displayName Text
UniqueProfile user
在getAuthId
中,您将返回现有的UserId
,或者如果不存在,则创建一个新条目。在HomeR
中,如果有Profile
(getBy $ UniqueProfile uid
),您将获得,如果没有,则显示注册表单。