Skip to main content

2 posts tagged with "facebook"

View All Tags

· 4 min read

1. Disable session

구현중인 REST API에서 SNS 연동이 필요한 부분이 있다. (API server에서 SNS 연동까지 해야하는지는 고민중이지만)

REST API는 session 유지를 해서는 안된다고 많은 참고자료들에서 언급이 되고 있는데 (인증에 대한 정보를 API 호출시 넘기도록 함)

SNS와의 OAuth를 위해 살펴본 node.js의 passport 모듈에도 관련 내용이 기술되어 있다.

참고 링크 : http://passportjs.org/guide/authenticate/

스크린샷 2013-11-06 오후 11.35.11

Passport는 인증과 관련된 기능을 좀 더 쉽게 처리하고자 만들어진 모듈인데, 인증 기능을 다룬 부분에 session이 필요없을 경우 disable이 가능하도록 옵션을 제공하고 있는 것을 알 수 있다. 그리고 굳이 API server와 같은 상황을 예로 들고 있다.

2. Passport를 활용한 strategy의 구현부 (Session 강제)

Passport를 활용하고 있는 모듈들이 몇가지 있는데 주로 passport의 API만 가지고 구현하기 번거로우니 특화된 기능을 사용하기 쉽게 정리해놓고 있다. passport-oauth, passport-twitter, passport-facebook 등이 그 예인데, twitter와 연동해보려고 간단히 사용해보니 session을 사용하지 않으면 오류가 발생하는 걸 확인했다. passport-twitter가 포함하고 있는 passport-oauth1 (OAuth 1.0을 구현, 링크 : https://github.com/jaredhanson/passport-oauth1)의 strategy.js (실제 대부분의 기능을 담고 있는 구현부)를 보니 120번째 라인에서 request에 session이 없는 경우 오류를 리턴하도록 구현되어 있었다.

스크린샷 2013-11-06 오후 11.39.59

passport-oauth1은 passport-oauth와도 관계가 있는 모듈로 passport 자체는 session을 disable 할 수 있도록 되어있지만 passport를 활용한 다른 모듈들은 사실 session을 강제하고 있다. 실험삼아 session disable이 가능한 authenticate 함수에서 disable option을 담아서 호출해 봤는데 결국 마지막에 호출되는 passport-oauth1에서 오류가 발생하는 걸 확인할 수 있었다.

3. 결국 oauth 구현

passport.js만을 이용해서 SNS 연동을 할 수도 있겠지만 passport 자체가 OAuth만을 위해 만들어진게 아니라서 작업이 번거로울 것 같다는 생각이 들었다. 어찌되었든 비슷한 기능을 하는 다른 모듈을 찾거나 결국은 내가 직접 구현을 해야하는 상황. node-oauth (npm에서는 oauth라는 이름, 링크 : https://github.com/ciaranj/node-oauth) 라는 모듈을 passport 대신 사용해서 직접 구현할 생각이다.

· 2 min read

특정 사이트의 글을 쉽게 공유하기 위해 Facebook에서 몇 줄만으로 공유 기능을 적용할 수 있도록 코드를 제공하고 있다.

Title과 URL 등은 쉽게 Sharer에 Parameter로 입력가능하도록 되어 있으나 Thumbnail 설정은 공유하고자 하는 페이지 소스 내에 메타태그를 하나 추가해야 한다.

이런저런 시도를 해보니 Image URL은 상대경로로 지정하면 안되고 꼭 URL 전체 경로를 입력해야 가능한 듯 싶다. (http:// 포함, 왜 이렇게 불편하게 했을까?)

위의 메타태그를 추가했는데도 공유시에 Thumbnail이 뜨지 않는다면 아래의 페이지에 접속해서 메타태그가 추가된 페이지 주소를 입력해본다.

https://developers.facebook.com/tools/debug

(여기저기서 https://developers.facebook.com/tools/lint 로 가라고 하는데 결국은 위의 주소로 넘어가게 됨)

입력한 메타태그가 문제가 있다면 오류 내용을 보여주고 없다면

아래 그림처럼 Thumbnail이 보이게 되며 이 때 부터는 지정한 Thumbnail이 공유시에 나타난다.

왜 이런 불편한 과정을 거쳐야 할까?

이유는 명확하지 않으나 추측하건데 facebook 서버쪽에 반영이 잘 되지 않는 듯 싶다.

lint에서 한 번 검사를 하면 그 때서야 반영이 되는 것 같고...

Facebook 이니까 머지않아 개선된 기능을 보여줄거라고 기대해본다.