TIL_20.08.03(월)~04(화)

nRecode·2020년 8월 4일
0

TodayILearned

목록 보기
71/95
post-thumbnail

20.08.03(월)

소셜로그인 적용??

프로젝트가 어느정도 다 구현이 된 상태에서 더 추가하기로 한 것이 소셜로그인인데, 인증에서 토큰을 사용했기에 소셜로그인을 구현하면서 세션을 사용하기엔 토큰을 사용한 이유가 퇴색되는 것 같아 고민이 많이 되었다...

그래서 오늘은 조사 하는 시간이 많이 필요했다. 세션없이 토큰으로 구현을 위해 spring boot 라는 것을 살펴봤는데, 자바 기반에서 사용되는 라이브러리 같았고 역시 passport를 이용해서 세션없이 구현해봐야겠다는 생각이 들었다.

우선 구글로그인을 사용하기 위해 구글에서 client key와 secret을 발급받았다.

서버 재배포

이번 프로젝트에서는 재배포를 정말 잦게 실행하는 것 같다. pm2를 실행시킨지 얼마 지나지 않았는데 벌써 restart가 3번 명령됐다 ㅋㅋ...

이번 재배포에서는 회원 탈퇴시 유저가 이제껏 등록한 옷들도 모두 삭제되도록 처리하는 부분을 포함시키고, 다른 코드역시 다듬어서 재배포하였다.

20.08.03(화)

소셜로그인 구현!

passport로 구현하는 데 세션을 없이 사용하는 예제들이 너무 없어서 구현하기가 어려워서 이것 저것 코드를 살펴보고 코드를 이해한 뒤 소셜로그인하면 가져올 수 있는 profile을 이용해서 기존에 있는 데이터 베이스에 등록시키는 로직을 구현하였다. (뭔가 야매 같지만...)

auth/google에서 유저가 로그인을 마치면, 토큰을 발급해서 클라이언트에게 전해준다!

router.get('/callback', passport.authenticate('google', { session: false }), function(req, res) {

    Users.
    findOrCreate({
        where: {
            email: req.user.emails[0].value,
        },
        defaults: {
            password: req.id,
        },
    })
    .then(async([user,created]) => {
        const data = await user.get({ plain: true });
        console.log(data);

        id = data.id
        email = data.email
        const payload = { id: id, email: email }
        const token = jwt.sign(payload,process.env.JWT_SECRET,
        { 
            expiresIn: "1 days"
        });
        console.log(token);
        res.status(200).json({token: token });
    }).catch((err) => {
        res.status(404).json({err:err.message})
    })

});

Reference

profile
안정성, 확장성 있는 서버를 구축하고 가꾸는 개발자를 목표로 공부하고 있습니다. 🤔🤔🤔🤔 부족하기에 맞지 않는 내용이 있을 수 있습니다. 가감없이 피드백 해주시면 정말 감사하겠습니다..🙏

0개의 댓글