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、登録情報を含むエンティティの2 つのエンティティに情報を分割することをお勧めします。例えば:

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

ではgetAuthId、既存の を返すか、UserId存在しない場合は新しいエントリを作成します。では、 ( )HomeRがある場合は取得し、ない場合は登録フォームを表示します。ProfilegetBy $ UniqueProfile uid

于 2012-08-01T17:19:28.683 に答える