programing

익스프레스 프레임워크를 사용하여 노드 J에서 쿠키를 설정하려면 어떻게 해야 합니까?

showcode 2023. 5. 25. 22:15
반응형

익스프레스 프레임워크를 사용하여 노드 J에서 쿠키를 설정하려면 어떻게 해야 합니까?

내 애플리케이션에서, 나는 익스프레스 프레임워크를 사용하여 쿠키를 설정해야 합니다.다음 코드를 시도해 보았지만 쿠키가 설정되어 있지 않습니다.

var express = require('express'), http = require('http');
var app = express();
app.configure(function(){
      app.use(express.cookieParser());
      app.use(express.static(__dirname + '/public'));

      app.use(function (req, res) {
           var randomNumber=Math.random().toString();
           randomNumber=randomNumber.substring(2,randomNumber.length);
           res.cookie('cokkieName',randomNumber, { maxAge: 900000, httpOnly: true })

           console.log('cookie have created successfully');
      });

});

var server = http.createServer(app);
var io = require('socket.io').listen(server);
server.listen(5555);

Express에서 미들웨어를 사용하는 순서가 중요합니다. 이전에 선언된 미들웨어가 먼저 호출되고 요청을 처리할 수 있는 경우 나중에 선언된 미들웨어는 호출되지 않습니다.

한다면express.static요청을 처리하는 중이므로 미들웨어를 위로 이동해야 합니다.

// need cookieParser middleware before we can do anything with cookies
app.use(express.cookieParser());

// set a cookie
app.use(function (req, res, next) {
  // check if client sent cookie
  var cookie = req.cookies.cookieName;
  if (cookie === undefined) {
    // no: set a new cookie
    var randomNumber=Math.random().toString();
    randomNumber=randomNumber.substring(2,randomNumber.length);
    res.cookie('cookieName',randomNumber, { maxAge: 900000, httpOnly: true });
    console.log('cookie created successfully');
  } else {
    // yes, cookie was already present 
    console.log('cookie exists', cookie);
  } 
  next(); // <-- important!
});

// let static middleware do its job
app.use(express.static(__dirname + '/public'));

또한 미들웨어는 응답을 보내 요청을 종료하거나 다음 미들웨어로 요청을 전달해야 합니다.이 경우에는, 제가 전화를 해서 후자를 했습니다.next()쿠키가 설정된 경우.

갱신하다

현재 쿠키 파서는 별도의 엔피엠 패키지이므로 사용하는 대신

app.use(express.cookieParser());

다음을 사용하여 별도로 설치해야 합니다.npm i cookie-parser다음과 같이 사용합니다.

const cookieParser = require('cookie-parser');
app.use(cookieParser());

세트 쿠키?

res.cookie('cookieName', 'cookieValue')

쿠키를 읽습니까?

req.cookies

데모

const express('express')
    , cookieParser = require('cookie-parser'); // in order to read cookie sent from client

app.get('/', (req,res)=>{

    // read cookies
    console.log(req.cookies) 

    let options = {
        maxAge: 1000 * 60 * 15, // would expire after 15 minutes
        httpOnly: true, // The cookie only accessible by the web server
        signed: true // Indicates if the cookie should be signed
    }

    // Set cookie
    res.cookie('cookieName', 'cookieValue', options) // options is optional
    res.send('')

})

질문에 정확하게 답하지는 못했지만, 제가 가지고 있는 문제에 대한 답을 찾던 중에 질문을 발견했습니다.아마 다른 누군가에게 도움이 될 것입니다.

문제는 쿠키가 서버 응답에 설정되었지만 브라우저에 의해 저장되지 않았다는 것입니다.

서버 응답이 쿠키 집합과 함께 반환되었습니다.

Set-Cookie:my_cookie=HelloWorld; Path=/; Expires=Wed, 15 Mar 2017 15:59:59 GMT 

이렇게 풀었습니다.

사용한fetch클라이언트 측 코드에서.지정하지 않은 경우credentials: 'include'에서fetch서버 응답이 쿠키를 설정하더라도 쿠키는 서버로 전송되거나 브라우저에 의해 저장되지 않습니다.

예:

var headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');

return fetch('/your/server_endpoint', {
    method: 'POST',
    mode: 'same-origin',
    redirect: 'follow',
    credentials: 'include', // Don't forget to specify this if you need cookies
    headers: headers,
    body: JSON.stringify({
        first_name: 'John',
        last_name: 'Doe'
    })
})

쿠키 설정:

res.cookie('cookie', 'monster')

https://expressjs.com/en/4x/api.html#res.cookie


쿠키 읽기:
(쿠키 파서 미들웨어 사용)

req.cookies['cookie']

https://expressjs.com/en/4x/api.html#req.cookies

급행에 쿠키를 설정하는 것은 쉽습니다.

  1. 쿠키 파서를 처음 설치합니다.
npm install cookie-parser
  1. 미들웨어 사용
const cookieParser = require('cookie-parser');
app.use(cookieParser());
  1. 쿠키에 대한 자세한 정보 설정
res.cookie('cookieName', '1', { expires: new Date(Date.now() + 900000), httpOnly: true })
  1. 해당 쿠키에 액세스하면 자세히 알아보기
console.dir(req.cookies.cookieName)

알았어!

  1. 쿠키 설정은 다음과 같이 수행할 수 있습니다.

    res.cookie('cookie name', 'cookie value', [options])
    

여기서 cookie_name은 설정할 쿠키의 이름(String)입니다(예: "token"). cookie 값은 해당 쿠키에 저장할 값(String)입니다.옵션에 대한 자세한 내용은 여기에서 확인할 수 있습니다. https://expressjs.com/en/api.html

옵션의 한 예로 쿠키가 유효한 기간을 나타내는 'maxAge'가 있습니다. 예를 들어 인증 토큰을 할당할 때 사용되며 사용자가 다시 로그인해야 할 때까지 로그인할 수 있는 시간을 제한하려고 합니다.

  1. 쿠키 읽기는 다음과 같이 수행할 수 있습니다.

     req.cookies['cookie name']
    

쿠키의 값을 반환합니다.

요청 하나에 대해 여러 쿠키를 설정하는 데 문제가 있는 경우

다음 방법을 사용해 보십시오.

res.setHeader('Set-Cookie', [
    `accessToken=${accessToken}; HttpOnly; Path=/; Max-Age=${60 * 60}; Secure=True;`,
    `refreshToken=${refreshToken}; HttpOnly; Path=/; Max-Age=${60 * 60 * 24 * 7 * 2}; Secure=True;`
]);

등형 읽기 쿠키 도우미:

function getCookieValue(cookieName = '', cookie = '') {
  const matches = cookie.match(`(^|[^;]+)\\s*${cookieName}\\s*=\\s*([^;]+)`)
  return matches ? matches.pop() : ''
}

// Node with express:
getCookieValue('cookieName', req.headers.cookie)

// Browser:
getCookieValue('cookieName', document.cookie)

express를 사용하여 노드에 쓰기:

res.cookie('cookieName', 'cookieValue')

브라우저에서 쓰기:

function setCookie(
  cname,
  cvalue,
  exdays = 100 * 365 /* 100 days */
) {
  const now = new Date()
  const expireMs = exdays * 24 * 60 * 60 * 1000
  now.setTime(now.getTime() + expireMs)

  document.cookie = `${cname}=${cvalue};expires=${now.toUTCString()};path=/`
}

// Example of usage
setCookie('cookieName', 'cookieValue')

이것이 당신에게 도움이 될 것 같습니다.axios에서 요청을 보내다가 동일한 문제가 발생하여 credential 등에 오류가 발생하였습니다.이를 위해서는 백엔드에서 cors()를 사용해야 하며, 다음과 같이 cors 옵션을 사용해야 합니다.

npm i cors;

코르스가 성공적으로 설치된 후.main server.js 파일로 가져오기

const cors = require('cors');

그리고 그 이후에는 라우팅하기 전에 코르스 미들웨어를 사용합니다.미들웨어를 어디에 두느냐가 중요합니다.그래서 경로 위에 코르스를 배치합니다.

var corsoption={
origin:"http://localhost:3000", //origin from where you requesting
credentials:true
}
//using cors
app.use(cors(corsoption));

이러한 옵션을 응답으로 쿠키 전송으로 설정한 후에만 브라우저에서 쿠키를 올바르게 설정하고 자격 증명으로 교차 오리진을 허용합니다.참고: 백엔드에서 쿠키를 구문 분석하려면 설치해야 합니다.

쿠키 파서

브라우저 요청에서 쿠키를 구문 분석합니다.

언급URL : https://stackoverflow.com/questions/16209145/how-can-i-set-cookie-in-node-js-using-express-framework

반응형