Omniauth를 이용한 페이스북 로그인을 알아보자.
개발자는 다음을 우선적으로 시행해야 한다.
1. 페이스북에 앱을 등록해서 App ID와 App Secret을 얻어야한다.
2. Website with Facebook Login을 사용한다고 설정한다.
다 됐다면 다음을 진행하자.
먼저 Gemfile에 다음 코드를 삽입한다.
gem 'omniauth-facebook'
그 다음 'bundle install'을 실행하자.
그러면 자동으로 oauth2, omniauth, omniauth-oauth2, omniauth-facebook을 설치할 것이다.
그 다음 프로젝트폴더/config/initializers/devise.rb 파일에 다음 코드를 입력하자.
require "omniauth-facebook"
config.omniauth :facebook, "APP_ID", "APP_SECRET"
그 다음 devise에서 만들어놓은 user 모델에 다음 코드를 삽입하자.
devise :omniauthable
그 다음 앱에 접속하면 다음과 같이 'Sign in with Facebook' 링크를 볼 수 있을 것이다.

지금 이 링크를 클릭하면 다음과 같은 에러를 볼 수 있는데,
이는 페이스북 인증이 성공적으로 이루어 졌을 시 불러질 콜백 메서드를 만들어 주지 않았기 때문이다.

이를 해결하기 위해 다음을 실행하자.
우선 프로젝트폴더/config/locales/routes.rb 파일에 다음 코드를 넣어주자.
devise_for :users, :controllers => { :omniauth_callbacks => "users/omniauth_callbacks" }
그 다음으로 프로젝트폴더/app/controllers/ 폴더에 users 폴더를 만든다.
그리고 프로젝트폴더/app/controllers/users/ 폴더에 omniauth_collbacks_controller.rb 파일을 만든다.
그러고 다음 코드를 넣어주자.

페이스북 정보데이터 => request.env["omniauth.auth"]
유저가 유효하면 로그인.
그렇지 않으면 회원가입 폼으로 이동.
그 다음 프로젝트폴더/app/models/user.rb 파일에 다음 코드를 넣어주자.

같은 이메일주소를 가진 회원이 없다면 새로 만든다.
이때 이메일과 이름은 페이스북 정보를 이용하고 비밀번호는 랜덤으로 생성한다.
그 다음 프로젝트폴더/app/models/user.rb 파일에 다음 코드를 넣어주자.

유저가 회원가입전에 생성됐을 때, 세션에서 이메일 정보를 가져온다.
참고자료
1. omniauth-facebook - Github
2. Facebook Authentication - Rails Cast
3. Adding Facebook Auth - Ruby On Rails Outsourcing
댓글을 달아 주세요