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"
logout 도 간단하다.
그냥 단순히 <domain_name 혹은 localhost>/logout 링크를 달아주면 끝이다.
만일 /logout 이라는 경로가 싫으면
everyauth.everymodule.logoutPath('/bye');
이런식으로 재설정 가능하다.
logout 후 리디렉션이 필요하다면
everyauth.everymodule.logoutRedirectPath('/navigate/to/after/logout');
경로를 임의로 설정하여 특정 위치로 이동하게 할 수 있다.
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
댓글
댓글 쓰기