TIL: nextron.js ipc 통신으로 jwt 사용 - 220723

Lumpen·2022년 7월 22일
1

TIL

목록 보기
95/244
post-custom-banner

ipc 통신에서 jwt 토큰 사용 하자

jwt

// jwtToken.ts

import jwt from "jsonwebtoken";

const SECRET_KEY = process.env.SECRET_KEY || "key";

export const jwtToken = {
  
  access: function (userId: string) {
    const payload = {
      userId,
    };

    return jwt.sign(payload, SECRET_KEY, {
      algorithm: "HS256",
      expiresIn: "1h",
    });
  },
  
  verify: function (token) {
    let decoded;
    try {
      decoded = jwt.verify(token, SECRET_KEY);
      return {
        ok: true,
        userId: decoded.userId,
      };
    } catch (err) {
      return {
        ok: false,
        message: err.message,
      };
    }
  },
  
  refresh: function () {
    return jwt.sign({}, SECRET_KEY, {
      algorithm: "HS256",
      expiresIn: "24h",
    });
  },
  
  refreshVerify: function (token, storeToken) {
    if (token === storeToken) {
      return true;
    }
    return false;
  },
};
// home.tsx

// 메인 페이지 첫 진입 시 로컬 스토리지에서 토큰 불러와서
// 유효성 검증

// token이 있을 경우 서버에 FIRST_CONNECTION send()로 token 보내고 on() 으로 verify 결과 받는다
useEffect(() => {
    const token = store.get("authorization");
    if (token) {
      ipcRenderer.send("FIRST_CONNECTION", { token });
      ipcRenderer.on("FIRST_CONNECTION", (evt, payload) => {
        if (payload) router.push("/list");
      });
    }
  }, []);
// background.ts

import { jwtToken } from "./jwtToken";

// client에서 보낸 token verify() 후 결과 보낸다
ipcMain.on("FIRST_CONNECTION", (evt, payload) => {
  const isLogin = jwtToken.verify(payload.token.accessToken).ok;

  evt.reply("FIRST_CONNECTION", { isLogin });
});
profile
떠돌이 생활을 하는. 실업자, 부랑 생활을 하는
post-custom-banner

0개의 댓글