【问题标题】:Snap auth username exist checkSnap auth 用户名存在检查
【发布时间】:2013-12-20 23:49:12
【问题描述】:

由于我对 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

【问题讨论】:

    标签: haskell haskell-snap-framework


    【解决方案1】:

    试试这样的。尚未在 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',因为这表示永久重定向。

    【讨论】:

      猜你喜欢
      • 2018-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-20
      相关资源
      最近更新 更多