매거진 유저 인증

Github 로그인 (3)

by 이종복
hello402.png



2) 여기서 cb함수는 Passport에서 제공되는 callback 함수입니다.

Passport에서 Callback 함수가 호출되는 때는, 인증에 성공한 상황입니다.

hello403.png


3) 예를 들어 User.findOrCreate 부분에서 유저를 찾거나 생성하는데,

이 때, 2가지 옵션이 있습니다.

하나는 cb를 호출할 때 에러 없이 user를 넣어주는 것

에러가 없다고 하고 User object를 넣고 함수를 호출하면

Passport는 사용자를 찾았다는 것을 알게됩니다.

그러면 Passport는 유저 ID를 쿠키에 넣어주고,

username+password(local 방식) 인증할 떄와 똑같은 걸 해줍니다.


만약 유저 없이 에러만 넣어서 함수를 호출하면

Passport는 우리가 사용자를 찾지 못한 걸로 알게 됩니다.

hello404.png


4) 그리고 다음과 같은 두 줄의 코드를 추가합니다.

const user = await User.findOne({email}); 을 통해서 Github으로부터 온 이메일과

동일한 이메일을 가진 사용자를 찾게합니다.

return cb(error) 를 통해서 에러 발생시, Passport가 사용자를 찾지 못한 것으로 알게 합니다.

hello405.png


5) accessToken과 refreshToken은 사용하지 않을 것이므로,

다음과 같이 빈칸으로 처리해줍니다.

hello406.png
hello407.png


5) 다음과 같이 const user 아래에 console.log(user)를 추가하고,

join 페이지에서 Continue with github을 누르면

다음과 같이 null이라고 출력되는 것을 확인할 수 있습니다.

왜냐하면 단순히 Continue with github을 누르는 것은 회원이 신규 가입을 하는 것이 아니기 때문입니다.

hello408.png
hello409.png


6) 다음은 예를 들어, 특정 이용자가 이메일+패스워드로 가입되어 있다고 가정해봅시다.

그 사용자가 가입을 한 후에, 깃헙으로 로그인 하기를 클릭하면,

그 사용자를 로그인시켜야 합니다.

즉, 내가 그 이메일을 쓰는 사용자를 찾는다면, 난 그 사용자의 정보를 갱신해야 합니다.

이 때는 id를 user의 githubId에 배정하고, 저장합니다.

그리고 첫번째 매개변수인 error는 없음(null)을, 두번째에는 user를 넣어줍니다.

그리고 이것을 쿠키에 저장할 수 있습니다.

hello411.png


7) 만약 사용자를 찾지 못했다면, 사용자를 새로 만들어줘야 합니다.

const newUser로 새로운 사용자를 만들고,

이 새로운 사용자의 정보에 email, name을 넣고,

githubId에는 id를, avatarUrl에는 avatar_url을 넣어줍니다.

hello412.png


8) 그리고 마지막에 cb를 호출하는데 error는 마찬가지로 null을,

user는 newUser를 넣어줍니다.

hello413.png


+ @ 실행 part. 실행을 통해서 점검하는 part.

keyword
매거진의 이전글Github 로그인 (2)