gpt4 book ai didi

kotlin - Ktor session Cookie 身份验证

转载 作者:行者123 更新时间:2023-12-02 12:20:00 35 4
gpt4 key购买 nike

我想使用 session cookie 与 Ktor 进行身份验证,到目前为止我所拥有的是:

private const val SEVER_PORT = 8082
private const val SESSION_COOKIE_NAME = "some-cookie-name"

data class AuthSession(
val authToken: String
)

fun main() {
embeddedServer(Netty, port = SEVER_PORT, module = Application::basicAuthApplication).start(wait = true)
}

fun Application.basicAuthApplication() {
install(Sessions) {
cookie<AuthSession>(SESSION_COOKIE_NAME, SessionStorageMemory()) {
cookie.path = "/"
}
}
install(DefaultHeaders)
install(CallLogging)
install(Authentication) {
session<AuthSession> {
validate { session ->
// TODO: do the actual validation
null
}
}
}

routing {
authenticate {
get("/") {
call.respondText("Success")
}
}
}
}

但每次当我这样做时:
curl -v localhost:8082

我得到一个 HTTP 200 和响应“成功”

我希望得到一个 HTTP 401 未授权或类似的信息。

有人可以告诉我如何使用 Ktor 进行正确的 session cookie 身份验证吗?

谢谢

最佳答案

更新:

好吧,我意识到有一个 session身份验证功能文档中未记录的身份验证类型。

您当前代码的问题在于您没有指定 challenge明确地,里面指定的默认挑战是 SessionAuthChallenge.Ignore所以你必须把它改成 SessionAuthChallenge.UnauthorizedSessionAuthChallenge.Redirect
所以你的代码应该是这样的:

install(Authentication) {
session<AuthSession> {
challenge = SessionAuthChallenge.Unauthorized
validate { session ->
// TODO: do the actual validation
null
}
}
}

旧:

您没有指定要使用的身份验证类型,可能是 basic , formjwt ,您可能想尝试这样的表单例份验证,例如:
install(Authentication) {
form("login") {

skipWhen { call -> call.sessions.get<AuthSession>() != null }

userParamName = "username"
passwordParamName = "password"
challenge = FormAuthChallenge.Unauthorized
validate { credentials ->
// Handle credentials validations
}
}
}

检查 official documentation了解更多信息。

关于kotlin - Ktor session Cookie 身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56592788/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com