store in mysql DB

어플을 실행하기 전에 MySql을 먼저 실행하고, Show tables;로 현재 테이블을 확인한다. 어플을 실행하면 테이블에 'sessions'라는 행이 추가되는 것을 확인할 수 있다.

데이터를 조작(수정/삭제/추가)하자마자 리다이렉트하는 경우!

res.session 객체에는 save라는 함수가 있다. 세션이 저장되고 난 후 함수가 호출, 실행된다.

DB에 세션데이터를 저장할 때 데이터 동기화를 위해 먼저 저장하고 난후 리다이렉트하는 콜백함수를 실행한다.

저장이 되기 전에 리다이렉트될 수가 있기 때문에 save함수를 생성해서 데이터를 저장하고 난 후 콜백함수(리다이렉트하는 함수)가 실행되도록 한다.(데이터가 불일치하는 경우를 방지하기 위해)

  • 로그아웃해서 welcome으로 리다이렉트해서 가는 경우 (session 데이터를 조작하는데 리다이렉트하는 경우)

app.get('/auth/logout',(req,res)=>{
    delete req.session.displayName;
    res.session.save(function(){
        res.redirect('/welcome');
    });
    
});
  • 로그인 성공해서 welcome으로 리다이렉트해서 가는 경우 displayName을 먼저 저장하고 그 다음에 welcome으로 리다이렉트되서 가야한다.

app.post('/auth/login',(req,res)=>{
    var user = {
        username:'egoing',
        password:'111',
        displayName:'Egoing'
    };
    var uname = req.body.username;
    var pwd = req.body.password;
    if(uname == user.username && pwd == user.password) {
        req.session.displayName = user.displayName;//로그인에 성공하면 그 세션 id의 displayName으로 user.displayName 저장한다. 세션 id에 해당하는 정보를 서버에 저장한다.
        req.session.save(function(){//save된 다음 리다이렉트한다.
            res.redirect('/welcome');
        });
        
    } else {
        res.send('Your ID or Password is wrong. Please check again.<a href="/auth/login">login</a>');
    }
});

=>로그인에 성공했으니 로그인 성공했을 때의 welcome이 나와야한다.

Last updated