Snap auth用户名存在检查

时间:2013-12-20 10:49:23

标签: haskell haskell-snap-framework

由于我的Haskell经验非常少,所以我真的很难绕过Snap。作为介绍,我正在尝试使用框架检查用户存在的示例。有人能告诉我如何调整下面的功能让我开始?这就是我现在所得到的。检查用户名是否存在后如何继续?

------------------------------------------------------------------------------
-- | Handle new user form submit
handleNewUser :: Handler App (AuthManager App) ()
handleNewUser = method GET handleForm <|> method POST handleFormSubmit
  where
    handleForm = render "new_user"
    handleFormSubmit = do result <- usernameExists "login"
                          result <- createUser "login" "password" >> redirect "/"
                          return result

1 个答案:

答案 0 :(得分:2)

尝试这样的事情。没有在ghc中检查它,但应该给你这个想法。

handleFormSubmit = do
    exists <- usernameExists "someUserName"
    case exists of
        True    -> writeBS "The username already exists"
        False   -> do
            createUser "someUserName" "password"
            redirect' "/" 301

使用redirect后无法返回值,因为它将客户端路由到新页面。如果createUser如果用户已经存在则抛出DuplicateLogin错误,那么捕获该错误可能比执行检查更好,因为在检查和插入之间仍然可以将相同的用户名插入其他位置。不太可能,但可能。此外,您应该使用redirect',因为这表示永久重定向。