2013-12-20 3 views
1

하스켈 경험이 거의 없기 때문에 Snap 주위에 머리를 감싸는 데 어려움을 겪고 있습니다. 소개로서 나는 프레임 워크가 사용자 존재를 확인하는 예제를 만들기 위해 노력하고있다. 어떤 사람이 저를 시작하기 위해 아래의 기능을 어떻게 적용 할 수 있는지 말해 줄 수 있습니까? 이것이 내가 지금 얻는 것입니다. 사용자 이름이 존재하는지 확인한 후 어떻게 계속합니까?Snap auth username exist check

------------------------------------------------------------------------------ 
-- | 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 

답변

2

다음과 같이 시도해보십시오. ghc에서 확인하지 않았지만 아이디어를 제공해야합니다.

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

당신은 redirect 사용 후 값을 반환 할 수없는 경로로 인해 새로운 페이지에 클라이언트. 사용자가 이미 존재하는 경우 createUserDuplicateLogin 오류를 던집니다. 체크와 동일한 사용자 이름이 다른 곳에 삽입 된 상태에서 체크인이 가능하기 때문에 오류를 포착하는 것이 더 나을 수 있습니다. 있을 법하지는 않지만 가능합니다. 또한 redirect'은 영구적 인 리디렉션을 의미하기 때문에 사용해야합니다.