코드번호 901에러


이 에러는 페이스북에 등록한 앱이 sandbox 모드일 때 일어난다.


 Sandbox Mode 란 앱 관계자만 페이스북을 통해서 접속이 가능한 모드이다.


이럴 때는 다음과 같이 sandbox 모드를 해제해준다.




그러면 다음과 같이 모두에게 접속가능해진다.






참고자료





'Ruby On Rails' 카테고리의 다른 글

TDD - fixture  (0) 2013.05.13
HTML <a> 태그와 ERB의 link_to 변환  (0) 2013.05.02
Omniauth - 페이스북 로그인 에러 901  (0) 2013.05.02
Omniauth - 페이스북 로그인 에러 191  (0) 2013.05.02
Bootstrap - navbar-form  (0) 2013.05.01
Omniauth - 페이스북 로그인  (0) 2013.05.01
Posted by 하남각목



코드번호 191 에러

이 에러는 페이스북 앱에서 Site URL이 잘못지정된 경우에 생기는 오류이다.

테스트시에는 localhost:3000과 같은 주소를 쓸 수 있으나 실제 서버에서 사용하려면 url을 적어줘야 한다.

  로컬에서 테스트할 때는 서버 url을 적을 시 같은 오류가 뜬다. 반드시 배포시에만 바꿔주자.



오류.


변경.


  서버 ip주소를 적어도 같은 오류가 생긴다. 반드시 도메인 네임을 써줘야 한다.

  아직 도메인을 구입하지 않았다면 /etc/hosts 에서 도메인을 지정해 줄 수 있다.




참고자료







Posted by 하남각목


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 하남각목



Devise 2.0은 Rails 3.1이상에서만 사용가능하다.

Devise를 레일즈에서 사용하려면 다음을 Gemfile에 넣으면된다.

  gem 'devise'



다음으로 bundle 커맨드 명령어로 인스톨해준다.

bundle install



인스톨이 완료되면 generator를 사용하여 앱에 설치한다.

rails generate devise:install


generator는 devise의 모든 환경설정 옵션들을 담고있는 initializer를 설치한다.

위치는 config/initializers/devise.rb이다.


그 다음으로 수동적으로 해야 할 일이 있다.

1. config/environments/development.rb에 디폴트 url을 설정해 준다.

  config.action_mailer.default_url_options = { :host => 'localhost:3000' }

  단, production 모드일 경우 :host가 실제 호스트가 되게 설정한다.


2. config/route.rb에 루트 url을 설정해 준다.

  예를 들어,

 root :to => "home#index"


3. app/views/layouts/application.html.erb에 flash 메세지를 표시하는 코드를 삽입한다.

  <p class="notice"><%= notice %></p>

  <p class="alert"><%= alert %></p>


4. Heroku에서 빌드 중이라면 config/application.rb에 다음을 설정한다.

  config.assets.initialize_on_precompile = false


5. 뷰를 커스터마이징 하고 싶다면 devise view를 복사한다.

  rails generate devise:views




다 했으면 devise model을 추가한다.

  rails generate devise MODEL

  MODEL은 실제 모델 클래스 이름으로 대체한다. 보통 User나 Admin으로 한다.



그 다음 데이터베이스 마이그레이션을 실행한다.

이는 config/route.rb에 devise 컨트롤러의 위치를 자동으로 설정해준다.

  rake db:migrate



이 시점에서 서버를 재실행해준다.



로그인을 원하는 컨트롤러에 다음 코드를 삽입한다. (클래스 선언 바로 아래에 선언해준다.)

  before_filter :authenticate_user!

  devise 모델명이 member라면 before_filter :authenticate_member!라고 해야한다.



해당 컨트롤러에 접속하면 다음과 같은 로그인 페이지를 볼 수 있다.




참고자료

1. devise - github


Posted by 하남각목