인프런 커뮤니티 질문&답변

성민최님의 프로필 이미지
성민최

작성한 질문수

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

안녕하세요, 질문 몇 가지 입니다.

작성

·

129

0

안녕하세요, 먼저 좋은 강의 감사드립니다. 강의 공부 이후 몇가지 질문이 있어 글 남깁니다 !

 

1. 아래 코드에서

bcrypt.hash(user.password, salt, function (err, hash) {
        //암호화 할 데이터, 암호 해시에 사용할 솔트.숫자로 지정되면 지정된 라운드 수로 솔트가 생성되어 사용됨.
        //cb : 데이터가 암호화 되면 호출 발생(오류,암호화된 양식을 제공하는 콜백의 매개변수.)
        if (err) return next(err);
        user.password = hash;
        next();
      });

hash()의 콜백은 데이터가 암호화 되면 발생한다고 하였는데, 그럼 hash의 파라미터 두개가 들어온 시점에서 이미 암호화가 된것인가요? user.password = hash를 해주는 것이 암호화를 해주는 것 아닌가요?

 

2.

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

  user.token = token;
  user.save(function (err, user) {
    if (err) cb(err);
    cb(null, user);
  });
};

sign()에서 user.id를 toHexString()으로 해서 넣어줬는데, 그렇다면 만약 제가 db에 따로 id항목을 만들어서 1~관리한다고 치면 user._id가 아닌 user.id를 사용해도 괜찮은것인가요?

또한 위에서 save를 쓰는데 우리는 위에서 pre("save"를 만들었습니다. 

그럼, 이 코드에서도 위에서 작성한 pre가 작동한 이후에 비밀번호가 바뀌는 경우가 아니기때문에 그냥 next()되는 것인가요?

 

3. 서버측 auth.js에서, 

  let token = req.cookies.x_auth;

이 코드는 cookies가 따로 선언된곳이나, 들어오는 request에도 쿠키가 있는지 잘 모르겠습니다.

어떻게 사용할수있는건가요 ??

 

4. 서버측 user.js의 pre ("save, 중

  //isModified("문서") : 가 수정된 경우 true를 반환하고, 그렇지 않으면 false를 반환한다.
  if (user.isModified("password")) {
    //gensalt : generate Salt for my password which need to encrypted
    bcrypt.genSalt(saltRounds, function (err, salt) {

제가 이해한 바로는, 이 isModified는 password가 수정된 경우 true를 반환하는 함수인데,

우리는 회원가입 할 때 save 직전에 이 함수가 실행됩니다.

이 때 회원가입에서 사용되는 데이터는 클라이언트 측에서 보내온 데이터이구요.

그렇다면 password의 변경점이 없었다고 생각하는데 왜 true가 반환되어 실행되는 것인가요?

genSalt도 아래에 있기에 입력숫자 -> salt변경도 아닌 것 같고, 혹시 db스키마를 만들면 기본값으로 들어있는 값이 있는것인가요 ?

 

5. loginPage에

onSubmit이 action Creater

dispatch( loginUser(body) )에서 loginUser를 action 이 맞나요 ?

 

6. 혹시 

//applyMiddleware : 미들웨어를 적용하는 것.
//promiseMiddleware와 ReduxThunk를 적용하고, createStore를 통해 store를 만들어 준다.
const createStoreWithMiddleware = applyMiddleware(
  promiseMiddleware,
  ReduxThunk
)(createStore);

와 같이 마지막에 (괄호)를 사용하는 문법은 어떤 문법일까요 ?(뭐라고 검색해서 찾아봐야할까요??)

저 코드를 arrow나 function 형태로 정리하면 어떤 식인가요? (아래 질문에 첨부한 코드에서 파라미터를 넣는 형식이 이해가 가지 않아서 질문합니다.)

 

7. 전체적인 흐름을 다시한번 파악하면서 공부중인데, redux의 type에 관해서 잘 이해가 가지 않습니다.

types.js에서는 어째서 "login_user"와 같이 소문자를 넣어줬는지 (이 부분을 찾아보니 redux의 type권장 ??이라고 하는데 영어가 좀 부족해서 공식문서를 제대로 읽질 못했습니다 ㅠㅠ)

_reducers 폴더에 user_reducer.js에 해당하는 내용이 어떤 파일에서 사용이 되었는지

(제가 이해하기로는 client/index.js에서 

import Reducer from "./_reducers";
<Provider
    store={createStoreWithMiddleware(
      Reducer,
      window.__REDUX_DEVTOOLS_EXTENSION__ &&
        window.__REDUX_DEVTOOLS_EXTENSION__()
    )}
  >

에서 Reducer에서 자동으로 _reducers의 index.js를 파악하고, index.js 안에서 combine된 항목들 중 user reducer를 store로 올려 state를 관리하게 한다. 혹시 이게 맞을까요 ? )

 

강의를 끝까지 다 들어보고 한번에 질문을 올려 질문이 너무 많은 것 같아 죄송합니다.

좋은 강의 찍어주셔서 감사합니다. 앞으로 로드맵 열심히 따라 가보도록 하겠습니다 !

 

답변 1

0

John Ahn님의 프로필 이미지
John Ahn
지식공유자

안녕하세요! 

1. 암호화 이미 된 것을 할당해주는 것입니다! 

2. 저장하는 경우가 아니라면 아예 저 함수에 들어가질 않습니다 

3. req 객체 안에 cookie가 자동으로 할당돼서 날아옵니다. 

4. 데이터베이스에 비밀번호가 없는데 생기게 하는 것도 바뀌는 걸로 인식하는 게 아닐까요?! 

5. loginUser라는 액션을 디스패치 해줍니다. 

6. 이 부분 문법 이름은 저도 찾아봤는데 잘 안 나오는 것 같습니다 ~! 

7. 소문자를 사용하든 대문자를 사용하든 괜찮습니다. 저렇게 정의해줘야 실제 오타를 내도 에러로 찾을 수 있습니다. 정의하지 않고 타입을 사용하면 오타가 났을 때 에러 발견하기 어렵게 됩니다.
감사합니다 !

성민최님의 프로필 이미지
성민최

작성한 질문수

질문하기