사용자를 생성할 수 있게 만듬
인증을 통해 사용자를 로그인하고, 로그인 권한을 얻으며 다시말해, 로그인된 사용자의 토큰을 얻고 사용자의 로그인을 확인할 수 있음.
NextAuth
가 필요해짐.
이 패키지를 통해 우리는 1) 사용자를 인증하고 2) 사용자가 권한을 가지는지 여부를 확인할 수 있음.
NextAuth
를 이용하기 위해 다른 api를 추가해야 한다.
api/auth
로 시작하는 모든 알 수 없는 라우트를 잡아낸다.NextAuth 패키지가 내부에서 여러 라우트를 활용한다.
/api/auth
로 시작하고 NextAuth에서 처리됨.
/api/auth/[...nextauth].js
NextAuth
를 실행시키면 새로운 함수 handler() 함수
를 반환한다.
NextAuth()
를 호출함으로써 NextAuth()
에 의해 생성된다.
NextAuth()를 호출할 때 구성 객체를 전달할 수 있는데 그 객체를 통해 NextAuth()
의 동작을 구성할 수 있다.
configuration의 Options에서 필수 설정 옵션을 볼 수 있다.
Providers.
을 사용하고 수많은 옵션 중 Credentials
사용 이때 구성 객체 자체가 필요한데 몇 가지를 구성할 수 있다.
credential이 무엇인지 정의해보자.
NextAuth
가 양식을 생성할 필요가 없다. (이미 하나 갖고 있음)여기서 설정해야 할 한 가지는 바로 authorize
이다.
들어오는 login 요청을 Next.js가 수신할 때 우리 대신 호출해주는 메서드.
비동기 함수인 authorize()
는 프로미스를 반환한다.
제출된 credentials을 인수로 얻는다. 바로, 우리가 제출한 data가 있는 객체임. (이메일, 비밀번호)
credentails이 유효한지 확인하고, 아니라면 사용자에 알릴 것.
예를들어) 유효하지 않으면 사용자에 알릴 것. 에러 표시
db랑 연결하고 나중에 close까지 작성 미리하기.
입력된 이메일 사용자가 있는지 확인하고 비밀번호도 맞는지 확인할 것임.
db를 확인해서 'users' 쪽을 본다. 그리고 해당하는 email이 있는지 찾아본다.
만약 user가 없다면 error 던져
알다시피 비밀번호를 hash 했기 때문에 제출된 비밀번호와 저장된 비밀번호를 그냥 비교할 수 없음. compare
를 통해서 평문 비밀번호의 결과가 hashedPassword 인지 확인하고 만약 그렇다면 비밀번호가 일치하다는 뜻 !
코드 작성 완료한 상태
첫번째 인수는 : 사용자가 작성한 비밀번호
두번째 인수는 : MongoDB에 저장된 password 필드에 access 된다.
그런데, veryfyPassword()
가 비동기 함수라 프로미스를 반환함.
만약 비밀번호가 일치하지 않는다면 throw new Error!
user도 존재하고 , 비밀번호도 맞다면 로그인이 되어야 한다.
이때, 객체를 반환한다.
그리고, 이 객체는 해당 json의 web token으로 부호화될 것.
따라서 이렇게 객체를 반환하면 json web token으로 부호화된다.
json web token이 생성되었는지 확인해보자.
true
로 설정해서 json web token을 사용할 수 있게 하자.
우리는,
우리가 만든 이 api 라우트를 사용해서 로그인 확인 요청을 전송하기 전에 한가지 해야 할 일이 있다.