You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ktor OAuth集成问题:获取令牌后无法设置User Session

Ktor OAuth会话错误解决方案

问题原因

你碰到的Session data for type class com.example.plugins.UserSession was not registered错误,本质是Ktor的会话机制要求所有要存储的Session类必须提前在应用中注册,和你传入的参数无关——哪怕用硬编码的字符串创建UserSession,只要没注册类型就会报错。

解决步骤

1. 确保UserSession类可序列化

Ktor会话需要序列化Session对象,给你的UserSession加上@Serializable注解:

import kotlinx.serialization.Serializable

@Serializable
data class UserSession(val state: String, val accessToken: String)

如果项目还没引入kotlinx.serialization,需要在build.gradle.kts里添加依赖:

dependencies {
    implementation("io.ktor:ktor-serialization-kotlinx-json:$ktor_version")
}

2. 在应用中注册UserSession类型

在Ktor应用配置模块(通常是Application.module函数)里,通过install(Sessions)注册UserSession,Cookie存储是最常用的入门方案:

import io.ktor.server.application.*
import io.ktor.server.sessions.*

fun Application.module() {
    // 安装并配置会话
    install(Sessions) {
        cookie<UserSession>("USER_SESSION") {
            // 可选:配置Cookie属性,比如有效期、作用路径
            cookie.path = "/"
            cookie.maxAgeInSeconds = 86400 // 有效期1天
        }
    }

    // 这里放你的OAuth配置、路由定义(包括/callback)...
}

3. 验证路由位置

确保你的/callback路由是在module函数的routing块内定义的,这样会话中间件才能覆盖到该路由。

完成以上步骤后,再调用call.sessions.set(UserSession(...))就不会再报注册错误了。

内容的提问来源于stack exchange,提问作者Fprogramer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 03:52:13