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 浏览器不会发回它
您的设置可能就是这种情况,否则您应该能够在身份验证后访问受保护的端点。
我一直在尝试使用 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 浏览器不会发回它
您的设置可能就是这种情况,否则您应该能够在身份验证后访问受保护的端点。