EminemBurger
10
2020-12-29 16:30:32
0
154

react nodejs jwt인증이 됬다 안됬다하네요 ㅠㅠ


안녕하세요 선배님들 뉴비입니다

jwt토큰을 이용해서 인증받고 로그인하는 것을 구현해봤는데요.

문제는 토큰이 받아졌다가 안받아졌다가 합니다...

리덕스를 이용해서 토큰을 정상적으로 받으면 상태가 LOGIN_SUCCESS가 되도록 했는데

일단 확실한거는 토큰이 어떤 때는 날라오고 어떤 때는 안날라온다는 겁니다.

export const loginUser = (email, password) => async dispatch => {
    try {
        const config = {
            headers: {
                'Content-Type' : 'application/json'
            }
        }

        const body = JSON.stringify({email, password})


        const response = await axios.post('http://localhost:4000/app/signin', body, config)
        

        dispatch({
            type: LOGIN_SUCCESS,
            payload: response.data
        })

        dispatch(loadUser());

    } catch (error) {
        dispatch({ type: LOGIN_FAIL, payload: error })
    }

}

정상적으로 받았을 때는 로그인이 되고 못받았을때는 undefined라고 뜨더군요..

다음은 노드js 라우터 코드입니다


router.post(
    '/signin',
    [
        check('email', 'Type proper e-mail').isEmail(),
        check('password', 'Password is required').not().isEmpty()
    ],
    async (request, response) => {
        try{

            const {email, password} = request.body;
            let user = await signUpTemplateCopy.findOne({email});
            const errors = validationResult(request);

            if (!errors.isEmpty()) {
                return response.status(401).json({errors: errors.array()});
            }

            if (!user){
                return response.status(401).json({ msg: "There is no user with this e-mail"});
            }

            let isPasswordMatch = await bcryptjs.compare(password, user.password);

            if (isPasswordMatch) {

            const payload = {
                user: {
                    id : user.id
                }
            }
            jwt.sign(
                payload,
                config.get('jwtSecret'),
                (err, token) => {
                    if (err) throw err;
                    response.json({token});

                }
            )
            
            } else return response.status(401).json({msg: "wrong password"});
            

        } catch (error) {
            console.log(error.msg);
            return response.status(500).json({msg: "Server Error..."});
        }
})


백엔드는 아무 이상이 없는것 같아요.. token을 콘솔로 출력했을때 클라이언트가 받든 못받든 정상적으로 나오는 것을 확인했거든요.. 왜 클라이언트에서 token을 받았다 못받았다 하는건지 이해가 안갑니다..

비동기 async await를 분명 썼는데도.. 혹시 왜 이러는지 아시는 고수분 계신가요 ㅠ 정말 미치겠습니다.




0
  • 답변 0

  • 로그인을 하시면 답변을 등록할 수 있습니다.