inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

따라하며 배우는 노드, 리액트 시리즈 - 기본 강의

auth에서 x_auth를 가져오지 못하는 문제

해결된 질문

544

villena

작성한 질문수 2

0

사진과 같이 cookies로부터 x_auth를 가져오지 못하는 문제가 발생합니다.

console.log(req)를 출력해보니 headers에 cookie 밑에 x_auth가 있는 형태로 보여서

아래 사진처럼 let token = req.headers.cookie.x_auth로 수정해주고 postman을 실행해보았는데요

다음과 같이 토큰이 db와 일치하는데도 에러가 발생했습니다.

어디를 수정해야할지 도저히 모르겠어서 질문 드립니다.

auth.js

const { User } = require("../models/users");

let auth = (req, res, next) => {
    // 인증 처리 하는 곳

    // 클라이언트 쿠키에서 토큰을 가져온다.
    let token = req.cookies.x_auth;


    // 토큰을 복호화한 후 유저를 찾는다.
    User.findByToken(token, (err, user) => {
        if(errthrow err;
        if(!userreturn res.json({ isAuthfalseerrortrue})
        // req.token과 req.user에 값을 넣어주는건 이렇게 해두면 index.js의 app.get으로 req정보가 넘어올 수 있음
        req.token = token;
        req.user = user;
        // next를 사용해야 app.get의 두번째 인자인 auth에서 다음 실행으로 넘어갈 수 잇게 됨
        next();
    })
    // 유저가 있으면 인증 오케이
    // 유저가 없으면 인증 ㄴㄴ
}

// 다른 모듈에서도 사용할 수 있게 처리
module.exports = { auth };

users.js

// MongoDB Model and Schema

const mongoose = require('mongoose');
const bcrypt = require('bcrypt');
const saltRounds = 10;
const jwt = require('jsonwebtoken');


const userSchema = mongoose.Schema({
    name: {
        typeString,
        maxlength50
    },
    email: {
        typeString,
        trimtrue,
        unique1
    },
    password: {
       typeString,
       minlength5,
       maxlength100
    },
    lastname: {
        typeString,
        maxlength50
    },
    role: {
        typeString,
        default0
    },
    imageString,
    token: {
        typeString
    },
    tokenExp: {
        typeNumber
    }
})

userSchema.pre('save'function(next) {
    var user = this;
    if(user.isModified('password')) {
    // 비밀번호를 save되기 전에 암호화시킨다
        bcrypt.genSalt(saltRoundsfunction(err, salt) {
            if(errreturn next(err)
            // hash는 암호화된 비밀번호.. user.password를 암호화 하면 콜백함수에서 그걸 가져올때 hash를 사용
            bcrypt.hash(user.passwordsaltfunction(err, hash) {
                if(errreturn next(err);
                user.password = hash;
                next();
            });
        });
    } else {
        next()
    }
})

userSchema.methods.comparePassword = function(plainPassword, cb) {
    // plainPassword dsgesdw 암호화된 비밀번호 $2b$10$jLkT6X2XDLVJkR33reQuRe6/lcpyg/nis7cREwAlMKDq8P9rvRZFa
    bcrypt.compare(plainPasswordthis.passwordfunction(err, isMatch) {
        console.log(plainPassword)
        console.log(this.password)
        if(errreturn cb(err);
        cb(nullisMatch);
    })
}

userSchema.methods.generateToken = function(cb) {
    var user = this;
    // jsonwebtoken을 이용해서 token을 생성하기
    var token = jwt.sign(user._id.toHexString(), 'secretToken')

    // user._id + 'secretToken' = token
    // secretToken으로 user._id를 얻음
    user.token = token
    user.save(function(err, user) {
        if(errreturn cb(err);
        cb(nulluser);
    })
}

    userSchema.statics.findByToken = function(token, cb) {
        var user = this;
        // user._id + ' ' = token
        jwt.verify(token'secretToken'function(err, decoded) {
            // 유저 아이디를 이용해서 유저를 찾은 다음에
            // 클라이언트에서 가져온 token과 db에 보관된 토큰이 일치하는지 확인

            user.findOne( { "_id"decoded"token"token } , function (err, user) {
                if(errreturn cb(err);
                cb(nulluser);
            })
        })
    }

const User = mongoose.model('User'userSchema);
module.exports = {User}

도와주시면 감사하겠습니다ㅠㅠ

react nodejs

답변 4

0

villena

답변이 달린줄 몰랐는데 이거 app.use로 쿠키파서 사용하는 부분을 빠뜨렸던 게 문제였습니다!ㅠㅠ 도와주셔서 감사합니다ㅎㅎ

0

John Ahn

혹시  proxy 안쓰시고  cors 이용해서 직접 통신하고 계신가요 ~ ??   

0

김지원

안녕하세요! 저도 같은 문제로 고민하고 있었는데 이 질문을 발견해서 답글 달아요!! proxy 안쓰고 cors를 이용해서 직접 통신하고 있는데 이럴때는 다르게 해주어야하나요??? 답변 주시면 정말 감사하겠습니다!!!

0

villena

그렇게도 해봤는데 오류가 났습니다ㅜㅜ

0

John Ahn

안녕하세요 ~ 

쿠키 가져오실떄 

let token = req.cookies.x_auth;

이런식으로 가져와 보시겠어요 ~ ?

깃 이메일이랑 비번이 필요하다고 하네요

0

35

1

404 에러

0

102

1

34강 인증 체크에서 element 사용 때문에 에러나시는 분들 이렇게 하심 됩니다.

0

119

1

로그인, 로그아웃, 토근 작동 안 함

0

239

0

9강 오류 어떻게 해결하나요?

0

194

1

localhost 에서 연결을 거부했습니다.

0

1927

4

포스트맨에서 true가 안떠요

0

150

1

왜 안되나요

0

129

1

몽고db 연결 오류가 납니다 위에껀 입력한 코드, 아래껀 터미널이에요

0

243

1

로그아웃 401 에러(Unauthorized)

0

504

2

암호가 해싱되지 않고 입력값 그대로 db에 저장되는 문제

0

149

1

7강중에서

0

162

2

User.findByToken is not a function

0

211

1

루트 디렉토리

0

271

1

useState

0

560

1

프록시 잘 설정했는데도 404 오류 뜨는 분들

5

875

6

webpack 관련 에러 질문

0

219

1

리액트 관련 질문

0

272

1

14강 로그아웃 안됨

0

318

1

mongoDB 데이터 확인하는 법

0

410

1

postman 에러

0

291

1

선생님 리덕스를 사용하면 어떠한 부분이 좋은지 알 수 있을까요?

0

234

1

다음과 같은 에러들이 발생합니다.

0

273

1

14강 로그아웃 기능 구현시 postman에서 Cannot POST 오류가 뜹니다.

0

379

1