기본 콘텐츠로 건너뛰기

node.js(+express) everyAuth 적용기

node.js 용 package 중 everyAuth 라고 상당히 많은 서비스 API를 지원하는 훌륭한 라이브러리가 있다.
facebook, google, twitter 는 물론이고 github 에서 instagram 까지도 지원한다.
맨땅에 하기엔 사실 사용자 로그인/인증이라는 과정이 간단하지 않다.
설명을 쭉 읽어보니 그냥 커스텀 인증을 한다고 해도 구조가 잘 잡혀있어서 써야겠다고 결심.
express 프로젝트를 만들었다.

일단 facebook 부터 시작해보기로 했다.
먼저 OAuth 인증을 하려면 facebook 으로부터 appId 와 appSecret 두개 한쌍을 페어로 받아와야한다.

https://developers.facebook.com/apps 에서 "새 앱 만들기"를 한다음
App Name을 정해주자. Namespace랑 Web Hosting은 사용하지 않으므로 그대로 내버려둠.

그러고 난 뒤 보안 텍스트 확인하면
앱 > 앱이름 > Basic 으로 이동한다.

보면 앱이름과 App ID, App Secret, 아이콘을 확인할 수 있다.
아이콘은 적당히 수정하면 되고

"기본정보"와 "어떻게 앱을 Facebook과 통합시킬지 선택하세요"
두가지 설정 항목이 있음을 확인하고 "어떻게 앱을 Facebook과 통합시킬지 선택하세요" 에서 Website with Facebook Login 를 체크하면 사이트 URL 을 넣을 수 있다.
리디렉트 할 사이트 URL 을 넣고 변경 내용 저장.

일단 이걸로 facebook 준비는 끝났다.
별도의 facebook 앱 페이지를 만들거나 할 필요는 없다.

server.js 에 대략 구현하기를 (coffeescript)


everyauth = require 'everyauth'


# mock User list
user = {}

# set up for everyAuth
everyauth.facebook
  .appId(config.facebook.appId)
  .appSecret(config.facebook.appSecret)
  .handleAuthCallbackError (req, res) ->
    console.log "callback error"
    console.dir req
  .findOrCreateUser (session, accessToken, accessTokExtra, fbUserMetadata) ->
    console.log "find or Create User"
    # facebook 인증 직후 이쪽으로 온다. 사용자 등록을 할 타이밍
    user[fbUserMetadata.id] || user[fbUserMetadata.id]=fbUserMetadata
  .redirectPath('/');



이런 식으로 일단 했다. 별 내용은 없고 config.facebook.appId 과 config.facebook.appSecret 대신 facebook 에서 보았던 App ID, App Secret 내용을 복사해서 수정한다.

configure 쪽은 내 경우 아래와 같이 했다.
session 과 bodyParser, middleWare, methodOverride, router, 등등 use 를 해주고
마지막에 everyauth.helpExpress 를 추가한다. 순서가 잘못되면 오류가 날 수 있으니 주의하자.
역시 coffeescript 로


app.configure ()->
  ....
  app.use express.cookieParser()
  # enable session
  app.use express.session secret: config.sessionSecret, store: store
  app.use express.bodyParser() # for post
  app.use everyauth.middleware()
  app.use express.methodOverride()
  app.use app.router

  ....
  everyauth.helpExpress app


여기까지 한 다음
<domain_name 혹은 localhost>/auth/facebook 으로 가보자
everyauth 가 middleware 로 들어가면서 /auth/facebook 이라는 router 를 만드는 듯.
이 부분에 대한 언급이 없어서 도대체 어떻게 해야 페이스북으로 연결하는 건지 한참 찾았다.

app.get '/api/testAuth', (request, response) ->

    console.dir request.session
    response.writeHead 200, "Content-Type": "application/json"
    response.write JSON.stringify if checkAuth(request)
      "userId" : "#{JSON.stringify request.session.auth.facebook}"
      "result" : "authorized login"

session 에 제대로 들어왔는지 확인해보자.
facebook.user 에 JSON으로 id, name, first_name, last_name, link, username, hometown, location, work, description 등등이 들어와있는 걸 확인할 수 있다.

logout 도 간단하다.
그냥 단순히 <domain_name 혹은 localhost>/logout 링크를 달아주면 끝이다.
만일 /logout 이라는 경로가 싫으면
everyauth.everymodule.logoutPath('/bye');
이런식으로 재설정 가능하다.

logout 후 리디렉션이 필요하다면
everyauth.everymodule.logoutRedirectPath('/navigate/to/after/logout');
경로를 임의로 설정하여 특정 위치로 이동하게 할 수 있다.

참조 URL

댓글

이 블로그의 인기 게시물

세상 간단한 https(+secured websocket): Caddy

nginx, apache2 같은 걸로 매번 certbot 연동을 통해 https 하는게 지겨워서 알아보니 Caddy라는게 있더라. 설치법은 강하게 크기 위해 알아서 해본다. # cat /etc/caddy/Caddyfile your.shitty.site:8123 {   proxy / localhost:9123 {     websocket     transparent   } } 이건 외부에서 8123으로 들어오는 걸 내부적으로 9123로 맞춰서 https 맞춰주는 reverse proxy. 만일 port를 생략하면 # cat /etc/caddy/Caddyfile your.shitty.site {   proxy / localhost:9123 {     websocket     transparent   } } 기본포트인 443으로 되어 https://your.shitty.site 로 접속이 된다. 요새 말썽이던 cloudflare 버리고 netlify domain이랑 caddy를 쓰니까 앓던 이가 빠진 느낌. 이 조합은 당분간 계속 써야겠다 싶다.

저지연 오디오 생성 LLVC 사용기

https://github.com/KoeAI/LLVC 써봄 CUDA 11.8 버전 쓰고 있어 pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 VC 없어서 설치 https://wikidocs.net/168848 참조 FAIRSEQ 관련 오류 https://github.com/facebookresearch/fairseq/issues/2908 pip install editdistance  설치 No CUDA runtime is found, using CUDA_HOME='C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v11.8' 오류 멀쩡하게 있는데 안됨. pip install torch==2.1.0+cu118 torchvision==0.16.0+cu118 torchaudio==2.1.0+cu118 --extra-index-url https://download.pytorch.org/whl/cu118 다시 설치 set DISTUTILS_USE_SDK=1 이게 문젠가 설정하고 재도전 Using cached ruamel.yaml.clib-0.2.8-cp311-cp311-win_amd64.whl (118 kB) Building wheels for collected packages: fairseq   Building wheel for fairseq (pyproject.toml) ... error   error: subprocess-exited-with-error   × Building wheel for fairseq (pyproject.toml) did not run successfully.   │ exit code: 1   ╰─> [1829 lines of output]       No CUDA runtime is found, usi...