Jwt 令牌在端点生成,但未到达页面

Jwt 令牌在端点生成,但未到达页面,jwt,svelte,sveltekit,Jwt,Svelte,Sveltekit,我想用Svelte/Kit和JWT创建一个网站。 我在互联网上找到了一些说明,例如: 苗条JWT认证 使用Cookies的SvelteKit会话身份验证 但不幸的是,没有关于苗条套装和JWT的说明。所以我自己试过了 令牌在端点生成,但未到达页面(或不可调用)。我怀疑标题中的某些设置是错误的,但无法找出错误所在。这是我高度简化的测试环境: (1) 我从index.svelte页面调用endpoint login.js。对于测试,我省略了检查电子邮件和密码,并将JWT发送回。数据到了,但我没有看到J

我想用Svelte/Kit和JWT创建一个网站。 我在互联网上找到了一些说明,例如: 苗条JWT认证 使用Cookies的SvelteKit会话身份验证 但不幸的是,没有关于苗条套装和JWT的说明。所以我自己试过了

令牌在端点生成,但未到达页面(或不可调用)。我怀疑标题中的某些设置是错误的,但无法找出错误所在。这是我高度简化的测试环境:

(1) 我从index.svelte页面调用endpoint login.js。对于测试,我省略了检查电子邮件和密码,并将JWT发送回。数据到了,但我没有看到JWT

(2) JWT应该被发送到另一个端点。最好的方法是什么

“页面”
索引.svelte
(简化):


让电子邮件=”,密码=”;
const doLogin=async()=>{
const response=wait fetch(“/auth/login”{
方法:“POST”,
标题:{
“内容类型”:“应用程序/json”,
},
凭据:“包括”,
正文:JSON.stringify({
电子邮件,
密码
})
}); 
如果(response.status==200){
常量{done,value}=
等待响应。body.getReader().read();
等待console.log(“完成,value=,完成,
parse(新的TextDecoder(“utf-8”).decode(value));
wait console.log(“headers=”,response.headers);
}
}
欢迎来到MyAuth


提交
“endpoint”login.js(简化):

从“jsonwebtoken”导入jwt;
导出功能post(请求、上下文){
const token=jwt.sign({
数据:{text:“test”},
“最高机密”,
});  
常数响应={
现状:200,
标题:{
“内容类型”:“应用程序/json”,
'Authorization':'Bearer${token}`,
},
正文:{
密码OK:是的,
}
};
返回响应;
}
控制台显示:

done, value= false {passwordOk: true}
index.svelte:59 headers= Headers {}
index.svelte:44 Fetch finished loading: POST "http://localhost:3000/auth/login".
doLogin @ index.svelte:44

我认为您混淆了认证的两个主要部分:

  • 请求/发送凭据
  • 使用这些凭据访问受保护的内容
  • Authorization:Bearer${token}
    通常从(浏览器)客户端发送到服务器,请求访问受保护的内容。所以现在,您的服务器正在请求客户端的许可。这没有道理

    相反,登录端点应通过以下方式发送令牌:

    • 在登录端点中设置Cookie
    • 响应的
      body
      (其中
      passwordOk
      为)
    设置Cookie
    使浏览器在以后的每个请求中将此值作为Cookie发送。服务器可以在提供受保护内容之前检查此cookie值。这可能更安全,因为您可以发送仅HTTP的cookie


    如果在登录响应的主体中发送令牌,则客户端应在未来的请求中使用
    Authorization:Bearer${token}
    头发送令牌。然后,服务器可以在提供受保护的内容之前检查此标题。

    非常感谢您的解释。是的,我现在明白了,第一个测试程序已经按预期运行了。