code

Devise를 사용하는 Rails 3 : Facebook 계정을 사용하여 로그인하도록 허용하는 방법은 무엇입니까?

codestyles 2020. 11. 18. 09:06
반응형

Devise를 사용하는 Rails 3 : Facebook 계정을 사용하여 로그인하도록 허용하는 방법은 무엇입니까?


인증을 위해 Devise사용하는 Rails 3 애플리케이션이 있습니다. 이제 다른 사람이 Facebook 계정을 사용하여 로그인 할 수 있도록 허용해야합니다. 저는 이것을 Facebook Connect라고 생각하지만 Facebook Graph API라는 용어도 들어 봤기 때문에 어떤 것을 요청해야할지 모르겠습니다.

Facebook Connect를 Devise와 통합하려면 어떻게해야합니까?

해결책:

이 질문은 지금 꽤 오래되었습니다. 1 년 전 Devise v1.2는 OmniAuth 지원을 도입 했습니다 . 이제 Devise는 v2.1 (이 글 작성 시점)이며 OmniAuth를 사용하는 것이 훨씬 더 쉽습니다. 여기에 고안 위키에서 좋은 튜토리얼입니다 사용하여 omniauth-facebook로그인 페이스 북을 사용 할 수 있도록 고안와 보석 .

또한 애플리케이션 등록 및 Facebook Graph API 작업에 대한 이 훌륭한 자습서를 확인하십시오 .


Devise 1.2는 이제 omniauth를 사용하는 페이스 북 로그인 지원과 함께 제공되며 Rails 3.0에서 작동합니다. 위키 항목을 확인하십시오 .


나는 devise github 페이지를 확인하여 그들이 무엇을했는지 확인했습니다. 이 프로젝트는 매우 빠르게 진행되고 있으며 페이스 북 연결을 지원합니다. OAuth2에 대한 섹션을 확인하십시오. 그들은 github를 예로 사용하지만 페이스 북의 경우와 동일하며 차이점을 언급합니다. 나는 이것이 갈 길이라고 생각한다. 제 3 자 젬은 devise 나 rails만큼 빨리 움직이지 않는다. 건배.

죄송합니다. http://github.com/plataformatec/devise 링크가 있습니다.

편집하다

물론 여기서 코딩을 거의하지 않았는데 대부분 기본값을 사용했기 때문에 다음과 같이하겠습니다.

새 앱을 만들고이 gem을 gemfile에 추가합니다.

gem 'devise', :git => 'git://github.com/plataformatec/devise.git'
gem 'oauth2', :git => 'git://github.com/intridea/oauth2.git'

번들 설치를 실행하면 이러한 명령을 통해 기본 사용자 인증 모델을 사용할 수 있습니다.

rails generate devise:install
rails generate devise User

config / initializers / devise.rb에서 주석을 제거 / 수정하십시오. Facebook에서 app_key 및 secret을 얻는 위치에 대해서는 마지막 단락을보십시오.

config.oauth :facebook, 'app_key', 'secret',
    :site              => 'https://graph.facebook.com',
    :authorize_path    => '/oauth/authorize',
    :access_token_path => '/oauth/access_token'

이것은 사용자 모델이어야합니다.

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable, :lockable, :timeoutable and :oauthable
  devise :database_authenticatable, :oauthable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :email, :password, :password_confirmation, :remember_me

  def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
    # Get the user email info from Facebook for sign up
    # You'll have to figure this part out from the json you get back
    data = ActiveSupport::JSON.decode(access_token)

    if user = User.find_by_email(data["email"])
      user
    else
      # Create an user with a stub password.
      User.create!(:name => data["name"], :email => data["email"], :password => Devise.friendly_token)
    end
  end
end

Devise는 root : to => "something # here"를 사용하므로 색인 작업이있는 홈 컨트롤러를 만들고이를 사용하여 응용 프로그램을 루팅했습니다. 하지만 신경 쓰지 마세요. 기본 sign_n sign_out 경로를 갖도록 layout / application.html.erb에 넣었습니다.

<span>
  <%- if user_signed_in? %>
    <%= "Signed in as #{current_user.full_name}. Not you?" %>
    <%= link_to 'Sign out', destroy_user_session_path %>
  <%- else %>
    <%= link_to 'Sign in', new_user_session_path %>
  <%- end %>
</span>

Devise pretty much takes care of everything else for us. What you do need to do though is get your app_key and secret from facebook (used in devise.rb config file). This link should get you going. http://developers.facebook.com/setup


In my app, I use omniauth, which I think came out a bit after this question was answered.

https://github.com/intridea/omniauth


This blog post did it for me. Give it a look.


Just used Hugo solution with almost no problem. Here is the User.rb code I had to use :

class User < ActiveRecord::Base
  # Include default devise modules. Others available are:
  # :token_authenticatable, :confirmable, :lockable, :timeoutable and :oauthable
  devise :database_authenticatable, :oauthable

  # Setup accessible (or protected) attributes for your model
  attr_accessible :name, :email, :password, :password_confirmation, :remember_me

  def self.find_for_facebook_oauth(access_token, signed_in_resource=nil)
    # Get the user email info from Facebook for sign up
    # You'll have to figure this part out from the json you get back

    data = ActiveSupport::JSON.decode(access_token.get('https://graph.facebook.com/me?'))

    logger.info("received from Facebook: #{data.inspect}")

    if user = User.find_by_email(data["email"])
      user
    else
      # Create an user with a stub password.
      User.create!(:name => data["name"], :email => data["email"], :password => Devise.friendly_token)
    end
  end
end

The things changed in this code :

  • name is in attr_accessible (don't forget to add a name field to user)
  • changed JSON decoding

http://github.com/grimen/devise_facebook_connectable

This gem on github is quite straightforward. Worth a shot!


Here is a small application with integrates with Devise + Twitter + Facebook + Linkedin + Google + Github. All in one place.

You can find source here and a demo here

참고URL : https://stackoverflow.com/questions/3580557/rails-3-using-devise-how-to-allow-someone-to-log-in-using-their-facebook-accoun

반응형