Haskell 通过浏览器使用的 servant-auth cookie

Haskell servant-auth cookie used via browser

我一直在尝试使用 servant-auth 实现 cookie 身份验证并在我的网站中使用它。我按照项目的 GH 站点上的自述文件 https://github.com/haskell-servant/servant-auth 并添加了一个简单的 Lucid HTML,其中包含一个可以戳“登录”端点的表单,然后在我的浏览器中接收和存储 cookie。

data User = User String
    deriving (Eq, Show, Generic)

data Credentials = Credentials {
    credentialsUserName :: String,
    credentialsPassword :: String
} deriving (Eq, Show, Read, Generic)

instance ToJSON Credentials
instance ToJSON User
instance ToJWT User

instance FromJSON Credentials
instance FromJSON User
instance FromJWT User
instance FromForm Credentials

type Unprotected =
    "logMe" :> Get '[HTML] (Html ())
    :<|> "login" 
            :> ReqBody '[FormUrlEncoded] Credentials 
            :> Verb 'POST 204 '[JSON] (Headers '[ Header "Set-Cookie" SetCookie, Header "Set-Cookie" SetCookie] NoContent)

type Protected
   = "name" :> Get '[JSON] String

type AuthAPI =
    (Servant.Auth.Server.Auth '[Cookie] User :> Protected)
    :<|> Unprotected

我代码的其他部分与 README 中提供的片段非常接近(如果需要,我可以 post 它们)。 我遇到的问题是,即使浏览器中有 cookie,我仍然无法访问“受保护”端点。我得到不确定的 AuthResult。我想我遗漏了一小部分负责处理 cookie 到用户的转换。我应该如何将它放入我的代码中?

我也遇到了同样的问题,还没有解决link : https://github.com/DeepakKapiswe/Gyan-Lahari-Backend/blob/redisIntegration/src/App.hs

一些真正痛苦的设置是 cors 和 httpOnly

最近我发现即使您在 cookieSettings 中设置了 NotSecure,servant-auth-server 也会在此处内部设置 httpOnly 标志 https://github.com/haskell-servant/servant-auth/blob/696fab268e21f3d757b231f0987201b539c52621/servant-auth-server/src/Servant/Auth/Server/Internal/Cookie.hs#L127

当您通过 HTTP 而不是 HTTPS 在本地进行测试时,这种方式的 cookie 是 httpOnly 浏览器不会发回它

您的设置可能就是这种情况,否则您应该能够在身份验证后访问受保护的端点。