微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JWT 不会自动在 cookie 中设置

如何解决JWT 不会自动在 cookie 中设置

我在使用 JWT 凭据时遇到了严重问题。

我使用 node.js 作为后端,使用 angular9 作为前端。

在我的后端,我实现了用于登录的 API,它为用户创建了一个新的 JWT,并返回用户详细信息,如下所示:

@Post("signin")
@Middleware([
   body("email").isEmail().withMessage("Email must be valid"),body("password")
     .trim().isLength({ min: 6,max: 20 }).withMessage("Password must be between 6 and 20 characters"),validateRequest,])
private async signin(req: Request,res: Response) {
AppLogger.getLogger().info(`signin request made:\n ${JSON.stringify(req.body)}`);
const { email,password } = req.body;

const existingUser = await User.findOne({ email });
if (!existingUser) {
  throw new BadRequestError("Can not find user");
}

const passwordsMatch = await Password.compare(
  existingUser.password,password
);
if (!passwordsMatch) {
  throw new BadRequestError("Invalid Credentials");
}

const userJwt = jwt.sign(
  {
    id: existingUser.id,email: existingUser.email,admin: existingUser.admin,},process.env.JWT_KEY!
);

req.session = {
  jwt: userJwt,};

res.status(200).send(existingUser);}

我希望这个 JWT 会自动设置到我的前端 cookie 中,以便在其他 http 请求中进行身份验证。但是,在我登录并尝试从后端执行 GET 请求后,它抛出“未授权”。

我尝试将请求标头“withCredentials: true”添加到 GET 请求中。

另外,我尝试做一个代理文件,如:

{
"/api/*": {
  "target": "http://localhost:4000","secure": false,"logLevel": "debug"
}}

但它也没有解决问题。

我的前端代码

checkAuthenticated(userDetails: userAttr): Promise<userDoc> {
return this.http.post<userDoc>(`${environment.BE_ENDPOINT}/api/users/signin`,userDetails).toPromise();}

UserDoc 是一个包含登录用户详细信息的 json。

感谢您的帮助。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。