首页 > 解决方案 > 使用加盐密码创建用户以使用 AuthEmail 而不是 Auth.Dummy

问题描述

我正在尝试在 yesod 脚手架站点(postgres)的测试套件中用 Auth.Email 替换 Auth.Dummy,但是在创建用户时我无法设法对密码进行加盐。

我在 Foundation.hs 上设置了 Auth.Email,它工作正常。我还将 authenticateAs 函数设置为通过 Auth.Email 登录进行身份验证。但是在运行测试时,身份验证失败。我相信这是因为保存的密码没有加盐。我怎样才能给密码加盐?

测试导入.hs

authenticateAs :: Entity User -> YesodExample App ()
authenticateAs (Entity _ u) = do
    request $ do
        setMethod "POST"
        addPostParam "email" $ userEmail u
        addPostParam "password" "secret"
        setUrl $ AuthR $ PluginR "email" ["login"]

createUser :: Text -> YesodExample App (Entity User)
createUser ident = runDB $ do
    user <- insertEntity User
        { userEmail = ident
        , userPassword = Just "secret"
        , userVerkey = Nothing
        , userVerified = True
        }
    return user

在 test/Handler/Profile.hs

    it "asserts access to my-account for authenticated users" $ do
            userEntity <- createUser "foo"
            authenticateAs userEntity

            get ProfileR
            statusIs 200

如何使用加盐密码创建用户?

这是我收到的错误消息Ç:

asserts access to my-account for authenticated users FAILED [1]
2.0.0.0 - - [29/May/2019:13:39:35 +0900] "POST /auth/page/email/login HTTP/1.1" 303 0 "" ""
2.0.0.0 - - [29/May/2019:13:39:35 +0900] "GET /profile HTTP/1.1" 403 3105 "" ""

Failures:

  test/Handler/ProfileSpec.hs:20:13: 
  1) Handler.Profile, Profile page, asserts access to my-account for authenticated users
       Expected status was 200 but received status was 403

标签: haskellyesod

解决方案


推荐阅读