如果已经注册了电子邮件,Yesod.Auth.Email如何显示错误?

时间:2015-02-25 01:02:44

标签: haskell authentication yesod email-validation

当我尝试在已存在的RegisterR上注册电子邮件时,我发现用户已经存在,而不是显示错误消息,它会向给定的电子邮件地址发送电子邮件确认请求,就像我问的那样用于密码重置。

浏览完资源后,我发现registerHelper会检查电子邮件是否存在,如果存在,即使已经验证过,也会发送验证邮件。

-- [...]
    mecreds <- lift $ getEmailCreds identifier                           
        registerCreds <-                                                 
            case mecreds of                                              
                Just (EmailCreds lid _ _ (Just key) email) -> return $ Just (lid, key, email)
                Just (EmailCreds lid _ _ Nothing email) -> do            
                    key <- liftIO $ randomKey y                          
                    lift $ setVerifyKey lid key                          
                    return $ Just (lid, key, email)                      
                Nothing                                                  
                    | allowUsername -> return Nothing                    
                    | otherwise -> do                                    
                        key <- liftIO $ randomKey y                      
                        lid <- lift $ addUnverified identifier key       
                        return $ Just (lid, key, identifier)

        case registerCreds of
            Nothing -> loginErrorMessageI dest (Msg.IdentifierNotFound identifier)
            Just (lid, verKey, email) -> do
                render <- getUrlRender
                let verUrl = render $ verify (toPathPiece lid) verKey
                lift $ sendVerifyEmail email verKey verUrl
                lift $ confirmationEmailSentResponse identifier                                         
-- [...]

来源:https://hackage.haskell.org/package/yesod-auth-1.4.3.1/docs/src/Yesod-Auth-Email.html#registerHelper

由于registerCredsJust,当电子邮件存在并且有密钥时,它会再次向用户发送验证电子邮件,以便他/她可以将其用作密码重置链接。

我的问题是:

  1. 为什么这样工作?这基本上使注册已经存在的电子邮件地址等于请求密码重置。我确信它有充分的理由,这让我想知道我是否正确使用Auth.Email
  2. 请求到达时立即调用
  3. Yesod.Auth.Email.postRegisterR - 我在哪里可以检查电子邮件地址是否已存在,并通知用户?
  4. 编辑:事实证明我正在查看更旧版本的来源:我更新了问题。在yesod-auth-1.4.3中,此代码位于registerHelper,而不是postRegisterR

1 个答案:

答案 0 :(得分:1)

在#yesod上讨论之后,这可能是一个错误,所以我提出了一个问题: https://github.com/yesodweb/yesod/issues/948