로그인 정보 커스텀

const express = require("express");
const { User } = require("../models");
const bcrypt = require('bcrypt');
const passport = require("passport");

const router = express.Router();

router.post('/login',(req,res,next)=>{
    passport.authenticate('local',(err,user,info)=>{ //done으로 보낸것
        //에러가 있어서 보내졌다면
        if(err){
            console.error(err)
            return next(err);
        }
        //local.js에서 이메일이나비번이 없어 reason을 적어줬다면,
        if(info){
            return res.status(401).send(info.reason)
        }
        //둘다 없다면 (성공) 'user'는 local에서 받은 user
        return req.login(user, async(loginErr)=>{
            //먼저 에러처리
            if(loginErr){
                console.error(loginErr);
                return next(loginErr);
            }
            return res.status(200).json(user)//user를 json으로 보내준다. 
        })
    })(req,res,next) //미들웨어 확장법
})

이렇게 로그인정보를 넘겨줬습니다.

하지만, password가 섞여있고 필요한 정보가 추가되지 않아있습니다.

성공시에 user를 커스텀해주도록 하겠습니다.

const express = require("express");
const { User } = require("../models");
const bcrypt = require('bcrypt');
const passport = require("passport");

const router = express.Router();

router.post('/login',(req,res,next)=>{
    passport.authenticate('local',(err,user,info)=>{ //done으로 보낸것
        //에러가 있어서 보내졌다면
        if(err){
            console.error(err)
            return next(err);
        }
        //local.js에서 이메일이나비번이 없어 reason을 적어줬다면,
        if(info){
            return res.status(401).send(info.reason)
        }
        //둘다 없다면 (성공) 'user'는 local에서 받은 user
        return req.login(user, async(loginErr)=>{
            //먼저 에러처리
            if(loginErr){
                console.error(loginErr);
                return next(loginErr);
            }
            // 내가 원하는 로그인 데이터 넣고 빼주기
            const fullUserWithoutPassword = await User.findOne({
                where:{id:user.id}, //user.id가 같은 유저를 선택해
                //비밀번호 제거
                attribute:{exclude:['password']},
                //관계데이터 추가
                include:[
                    {model:Post},
                    {model:User,as:'Following'}, //모델생성시 as써줬으면 여기서도 써야한다.
                    {model:User,as:'Followers'},
                ],
            });
            return res.status(200).json(fullUserWithoutPassword)//커스텀한 user를 json으로 보내준다. 
        });
    })(req.res.next);
})

이제 로그인 과정이 모두 끝났습니다.

복잡하지만, 순서를 잘 보고 따라오면 이해하기 그나마 괜찮을 것같습니다...

Last updated