重定向sveltekit端点并将数据传递到页面



我正在使用oauth登录到一个服务。一旦登录,应用程序将我的应用程序重定向到set重定向uri,它也指向我的sveltekit端点(/callback)。在我验证代码并通过端点获得令牌之后,我想用令牌数据将客户端重定向/发送回主页,但我不知道如何。

我当前尝试的:

export async function get(response: IncomingRequest) {
if (response.query.has('code')) {
const code = response.query.get('code')
const url = `url endpoint to verify code above`
const verifiedCode = await fetch(url, {
method: 'POST',
headers: { 'Accept': 'application/json' }
})
if (verifiedCode) {
const data = await verifiedCode.json()
// redirect to homepage and give token to client
// tried:
return {
headers: {
location: '/'
},
body: data,
status: 302
}
}
}
}

在我的主页的get()端点中记录响应将导致body为null,无论我在该端点中放置什么body。

您希望谁来处理客户端的body: data?主页吗?一旦客户端浏览器接收到302,它就会开始导航。

正确的方法是发送"set-cookie"作为HTTP 302报头的一部分。客户端浏览器将保存此cookie,并将其与将来的任何请求一起发送给服务器。显然,它也可以访问它。

在下面的例子中,客户端浏览器将为cookie命名为"token"并且假设您的令牌或verifiedCode有一个到期日期,您也可以设置Max-Age(以秒为单位)。

return {
headers: {
location: '/',
'set-cookie': `token=${data}; SameSite=Strict; Max-Age=${tokenAge}`
},
status: 302
}

如果您想在用户调用端点时再次接收服务器上的verifiedCode,您可以使用response.headers.cookie读取它。

如果您想要一种简单的方法来访问由客户端OAuth提供程序生成的令牌值,那么您可以将该信息作为重定向请求中的查询参数添加。

所以你可以保持原来的样子,只是把那个令牌信息添加到location值。假设verifiedCode是这样的一个对象:

const verifiedCode = {
access_code: "eydkfsladkljdks..."
}

然后你可以像这样添加键值对:

export async function get(response: IncomingRequest) {
if (response.query.has('code')) {
const code = response.query.get('code')
const url = `url endpoint to verify code above`
const verifiedCode = await fetch(url, {
method: 'POST',
headers: { 'Accept': 'application/json' }
})
if (verifiedCode) {
const data = await verifiedCode.json()
// redirect to homepage and give token to client
// tried:
return {
headers: {
location: `/?access_token=${verifiedCode.access_token}`
},
body: data,
status: 302
}
}
}
}

这个查询参数可以从索引中访问。精简使用$page存储。使用$page.query.get('access_token')获取值

最新更新