一、创建KV
1、查询复制session_keys:https://demo.fuclaude.com//api/auth/session
2、具体操作
Workers 和 Pages→KV→创建命名空间→名称:SESSION_KEYS→密钥:session_keys_list→值:[“session_key1”, “session_key2”, “session_key3”]
二、cloudflare创建workers、kv
1、创建workers
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
async function handleRequest(request) {
try {
const sessionKeysJson = await SESSION_KEYS.get('session_keys_list')
if (!sessionKeysJson) {
throw new Error('No session keys available')
}
const sessionKeys = JSON.parse(sessionKeysJson)
if (!Array.isArray(sessionKeys) || sessionKeys.length === 0) {
throw new Error('Invalid session keys list')
}
let currentIndex = parseInt(await SESSION_KEYS.get('current_index') || '0')
let validKeyFound = false
let sessionKey
for (let i = 0; i < sessionKeys.length; i++) {
sessionKey = sessionKeys[currentIndex]
if (isValidSessionKey(sessionKey)) {
validKeyFound = true
break
}
// 如果当前key无效,尝试下一个
currentIndex = (currentIndex + 1) % sessionKeys.length
}
if (!validKeyFound) {
throw new Error('No valid session keys found')
}
// 更新索引
currentIndex = (currentIndex + 1) % sessionKeys.length
await SESSION_KEYS.put('current_index', currentIndex.toString())
// 构造重定向URL
const redirectUrl = `https://demo.xxxx.com/login_token?session_key=${sessionKey}`
return Response.redirect(redirectUrl, 302)
} catch (error) {
console.error('Error in handleRequest:', error)
return new Response(`Error: ${error.message}`, { status: 500 })
}
}
function isValidSessionKey(key) {
// 这里添加检查session key有效性的逻辑
// 例如,检查key的格式是否正确
return typeof key === 'string' && key.startsWith('sk-ant-sid01-') && key.length > 20
}
编辑代码(替换里边的demo.xxxx.com,demo.xxxx.com为自己创建的fuclaude,dns解析至demo)→点击部署。workers设置→触发器创建claude.xxxx.com(xxxx.com为域名)
最后session_key判断是否正确网友可以续写,这里暂时铺垫……
2、 KV 命名空间绑定
workers→设置→变量→ KV 命名空间绑定,输入变量名称、KV 命名空间均为: SESSION_KEYS。
最后打开https://claude.xxxx.com狂欢吧
【v0.2.8】闲来无事搓的一个小玩具
建立一个 Fuclaude Shared Chat 的第二步
76 Likes
devinglaw
Tags updated
9
Added #https:linuxdottopic1
neo
(Neo)
Tags updated
14
Claude, #Fuclaude添加,#https:linuxdottopic1移除
1 Like
能不能用这个功能验证啊,如果 key 过期或错误,应该不能生成登录接口吧?
我自己的 oai share 站会在更新 token 后用类似方法验证
curl 'https://demo.fuclaude.com/manage-api/auth/oauth_token' \
-H 'Content-Type: application/json' \
-d '{
"session_key": "sk-ant-sid01-xxx"
}'
返回 => {"detail":"invalid sessionKey"}%
2 Likes
按你这个修改了代码
addEventListener('fetch', event => {
event.respondWith(handleRequest(event.request))
})
const CACHE_TTL = 300 // 缓存有效期5分钟
async function handleRequest(request) {
try {
// 解析请求体
let userProvidedKey = null
if (request.method === 'POST') {
const body = await request.json()
userProvidedKey = body.session_key
}
// 如果用户提供了key,先验证它
if (userProvidedKey) {
if (await isValidSessionKey(userProvidedKey)) {
return redirectWithKey(userProvidedKey)
} else {
return new Response('Provided session key is invalid', { status: 400 })
}
}
const sessionKeysJson = await SESSION_KEYS.get('session_keys_list')
if (!sessionKeysJson) {
throw new Error('No session keys available')
}
const sessionKeys = JSON.parse(sessionKeysJson)
if (!Array.isArray(sessionKeys) || sessionKeys.length === 0) {
throw new Error('Invalid session keys list')
}
let currentIndex = parseInt(await SESSION_KEYS.get('current_index') || '0')
let validKeyFound = false
let sessionKey
// 检查缓存的有效key
const cachedValidKey = await SESSION_KEYS.get('valid_key')
if (cachedValidKey) {
console.log('Using cached valid key')
return redirectWithKey(cachedValidKey)
}
for (let i = 0; i < sessionKeys.length; i++) {
sessionKey = sessionKeys[currentIndex]
if (await isValidSessionKey(sessionKey)) {
validKeyFound = true
// 缓存有效的key
await SESSION_KEYS.put('valid_key', sessionKey, {expirationTtl: CACHE_TTL})
break
}
console.log(`Key ${sessionKey} is invalid, trying next`)
currentIndex = (currentIndex + 1) % sessionKeys.length
}
if (!validKeyFound) {
throw new Error('No valid session keys found')
}
// 更新索引
await SESSION_KEYS.put('current_index', currentIndex.toString())
return redirectWithKey(sessionKey)
} catch (error) {
console.error('Error in handleRequest:', error)
return new Response(`Internal Server Error: ${error.message}`, { status: 500 })
}
}
async function isValidSessionKey(key) {
if (typeof key !== 'string' || !key.startsWith('sk-ant-sid01-') || key.length <= 20) {
return false
}
try {
const response = await fetch('https://demo.fuclaude.com/manage-api/auth/oauth_token', {
method: 'POST',
headers: {
'Content-Type': 'application/json',
},
body: JSON.stringify({ session_key: key })
})
const data = await response.json()
return !data.detail || data.detail !== 'invalid sessionKey'
} catch (error) {
console.error('Error validating session key:', error)
return false
}
}
function redirectWithKey(sessionKey) {
const redirectUrl = `https://demo.xxxx.com/login_token?session_key=${sessionKey}`
return Response.redirect(redirectUrl, 302)
}
5 Likes
没有识别到KV,请问可能是啥原因呢?
提示:Error: SESSION_KEYS.get is not a function