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.
'code' 카테고리의 다른 글
ASP.NET의 HttpHandler 란? (0) | 2020.11.18 |
---|---|
gcc 및 ld의 위치 독립적 실행 파일에 대한 -fPIE 옵션은 무엇입니까? (0) | 2020.11.18 |
벡터 맵에 비해 멀티 맵의 장점은 무엇입니까? (0) | 2020.11.18 |
힘내 푸시가 "비 빨리 감기"를 거부했습니다. (0) | 2020.11.18 |
Linux에서 C # 개발을위한 IDE? (0) | 2020.11.18 |