4-2. 쿠키 설정하기

이제, 로그인 / 회원가입을 하고 나서 토큰을 httpOnly 속성을 적용하여 쿠키를 설정하는 방법을 알아보겠습니다. 쿠키를 설정 할 때는 다음과 같은 방식으로 합니다.

ctx.cookies.set('name', 'value', { httpOnly: true, maxAge: 1000 * 60 * 60 * 24 * 7 });

그럼 이제, auth 컨트롤러 파일을 수정해보겠습니다.

회원가입을 하고 나서, 토큰을 발급한 다음에, 쿠키로 설정하는 코드를 다음과 같이 입력하세요.

src/api/auth/auth.controller.js - localRegister

// 로컬 회원가입
exports.localRegister = async (ctx) => {
    (...)

    // 계정 생성
    let account = null;
    try {
        account = await Account.localRegister(ctx.request.body);
    } catch (e) {
        ctx.throw(500, e);
    }

    let token = null;
    try {
        token = await account.generateToken();
    } catch (e) {
        ctx.throw(500, e);
    }

    ctx.cookies.set('access_token', token, { httpOnly: true, maxAge: 1000 * 60 * 60 * 24 * 7 });
    ctx.body = account.profile; // 프로필 정보로 응답합니다.
};

코드를 저장하고나서, 회원가입을 다시한번 해보세요. 회원가입에 성공하면, 아래 스크린샷처럼 하단에 Cookies 탭을 클릭하면 생성된 토큰이 조회됩니다.

이렇게 만들어진 쿠키는 Postman 에서 다음 요청을 할때도 유지됩니다. 이 쿠키를 초기화시키려면 요청부분 Save 버튼 하단의 주황색 Cookies 텍스트를 누르셔서 쿠키창을 열어 쿠키를 지우면 됩니다.

이제, 로그인도 마찬가지로 설정하도록 하겠습니다.

src/api/auth/auth.controller.js - localLogin

exports.localLogin = async (ctx) => {
    (...)

    if(!account || !account.validatePassword(password)) {
    // 유저가 존재하지 않거나 || 비밀번호가 일치하지 않으면
        ctx.status = 403;
        return;
    }

    let token = null;
    try {
        token = await account.generateToken();
    } catch (e) {
        ctx.throw(500, e);
    }

    ctx.cookies.set('access_token', token, { httpOnly: true, maxAge: 1000 * 60 * 60 * 24 * 7 });
    ctx.body = account.profile; // 프로필 정보로 응답합니다.
};

코드를 입력하고나서, 이제 로그인을 시도하고, 쿠키가 설정되는지 확인을 해보세요.

로그아웃 구현하기

그 다음엔, 로그아웃 API 를 구현해보겠습니다. 이 부분에서는, 쿠키의 access_token 값을 null 로 설정하면 됩니다.

src/api/auth/auth.controller.js - logout

exports.logout = (ctx) => {
    ctx.cookies.set('access_token', null, {
        maxAge: 0, 
        httpOnly: true
    });
    ctx.status = 204;
};

results matching ""

    No results matching ""