티스토리 뷰

TIL

2020-06-22 TIL

Hoon1994 2020. 6. 22. 22:16

# Node.JS

 

export const githubLoginCallback = async (_, __, profile, cb) => {
  const {
    id, avatar_url, name, email
  } = profile._json;
  console.log(profile);
  try {
    const user = await User.findOne({ email });
    if (user) {
      user.githubId = id;
      user.save();
      return cb(null, user);
    }
    const newUser = await User.create({
      email,
      name,
      githubId: id,
      avatarUrl: avatar_url
    });
    return cb(null, newUser);
  } catch (error) {
    return cb(error);
  }
};

GitHub로 로그인을 구현하는 코드를 먼저 작성했다. 

 

githubLoginCallBack 함수는 new githubStrategy 를 생성할 때 기재한 함수로, 

accessToken, refreshToken, profile, cb 등 4개의 파라미터를 받는다.

 

그 중 profile, cd만 사용하기 위해 사용하지 않는 파라미터는 언더바로 처리했다.

profile._json 안에 있는 데이터를 변수로 가져온 후, 

User 데이터 베이스 내에서 email이 github email과 동일한 User가 있는지 찾는다. 

 

있다면, githubId를 저장하고 save, return 으로 cd함수를 호출해줘야 한다. 

cd(error, user) 에러와 유저를 받는다. 에러가 있으면 유저가 없다고 판단하여 종료하고,

유저를 넘겨줄 경우 해당 유저로 쿠키를 만들어 저장한다.

 

User에 기존 데이터가 없을 경우, 새로운 유저를 생성하고 정보를 저장한다. 

이 때 cd 함수에는 생성한 유저 데이터를 전달해주도록 했다. 

 

* github 계정이 private 일 경우 email을 전달받지 못하기 때문에 public 으로 이메일을 등록하면 된다. 

 

 

'TIL' 카테고리의 다른 글

2020-06-24 TIL  (0) 2020.06.24
2020-06-23 TIL  (0) 2020.06.23
2020-06-19 TIL  (0) 2020.06.19
2020-06-18 TIL  (0) 2020.06.18
2020-06-17 Node.js & MongoDB  (0) 2020.06.17
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/10   »
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
글 보관함