ruby-on-rails devise教學 - Rails 3使用Devise:如何允許某人使用他們的Facebook帳戶登錄?




4 Answers

Devise 1.2現在提供了使用omniauth的facebook登錄支持,並與Rails 3.0一起使用。 查看wiki條目

omniauth new_with_session

我有一個使用Devise進行身份驗證的Rails 3應用程序。 現在我需要允許某人使用他們的Facebook帳戶登錄。 我認為這叫做Facebook Connect,但我也聽過Facebook Graph API這個詞,所以我不確定我要求哪一個。

為了將Facebook Connect與Devise集成,我需要做些什麼?

解:

這個問題現在很老了。 一年前,Devise v1.2引入了OmniAuth支持。 現在Devise處於v2.1(截至本文撰寫時),使用OmniAuth更加容易。 這是一個來自Devise wiki的精彩教程, 使用omniauth-facebook gem和Devise允許使用Facebook登錄

另外,請查看有關註冊應用程序和使用Facebook Graph API的精彩教程。




在我的應用程序中,我使用omniauth,我認為在這個問題得到解答之後會出現一些情況。

OmniAuth




剛剛使用Hugo解決方案幾乎沒有問題。 這是我必須使用的User.rb代碼:

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

這段代碼中的內容髮生了變化:

  • name在attr_accessible中(不要忘記向用戶添加名稱字段)
  • 改變了JSON解碼



這是一個與D​​evise + Twitter + Facebook + Linkedin + Google + Github集成的小應用程序。 一切都在一個地方。

你可以在github.com/mohitjain/social-login-in-rails找到來源和演示




Related