我检查了设计 github 页面,看看他们在做什么。该项目进展得非常快,而且碰巧他们支持 facebook connect 等等。查看有关 OAuth2 的部分。他们以 github 为例,但对于 facebook 来说也是一样的,他们提到了差异。我认为这是要走的路,用于设计的第三方宝石不会像设计或导轨那样快速移动。干杯。
糟糕,这是链接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'
运行 bundle install,然后这些命令让您使用基本的用户身份验证模型。
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
设计使用一个根 :to => "something#here" 所以我创建了一个带有索引操作的主控制器并使用它来根应用程序。但没关系。我把它放在 layout/application.html.erb 中,这样我就有了基本的 sign_n sign_out 路由。
<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>
设计几乎可以为我们处理其他所有事情。不过,您需要做的是从 facebook 获取您的 app_key 和 secret(在 devise.rb 配置文件中使用)。这个链接应该让你去。http://developers.facebook.com/setup