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 



Posted by 하남각목

댓글을 달아 주세요