devise_oauth2_facebook 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/README +36 -0
- data/app/controllers/devise/facebook_consumer_controller.rb +49 -0
- data/config/locales/en.yml +4 -0
- data/lib/devise_oauth2_facebook/engine.rb +7 -0
- data/lib/devise_oauth2_facebook/facebook_consumer_helper.rb +11 -0
- data/lib/devise_oauth2_facebook/model.rb +46 -0
- data/lib/devise_oauth2_facebook/routes.rb +11 -0
- data/lib/devise_oauth2_facebook.rb +32 -0
- metadata +101 -0
data/README
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
Only Rails 3 is supported.
|
|
2
|
+
|
|
3
|
+
Uses fbgraph (http://github.com/nsanta/fbgraph)
|
|
4
|
+
Could use the Oauth2 gem directly, but it is more than likely that you
|
|
5
|
+
would want to use other features of facebook (ie post feed updates).
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
How to use
|
|
9
|
+
----------
|
|
10
|
+
Setup devise (http://github.com/plataformatec/devise), use Rails 3
|
|
11
|
+
|
|
12
|
+
Include the gem in Gemfile after devise:
|
|
13
|
+
gem 'devise'
|
|
14
|
+
gem 'devise_oauth2_facebook'
|
|
15
|
+
|
|
16
|
+
Include the ':devise_oauth2_facebook' in your model:
|
|
17
|
+
|
|
18
|
+
devise :database_authenticatable, :registerable, :confirmable,
|
|
19
|
+
:recoverable, :rememberable, :trackable, :validatable, :devise_oauth2_facebook
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
Add the following config options:
|
|
23
|
+
|
|
24
|
+
$ config/initializers/devise.rb
|
|
25
|
+
|
|
26
|
+
config.facebook_api_key = "KEY"
|
|
27
|
+
config.facebook_api_secret = "SECRET"
|
|
28
|
+
config.facebook_permissions = 'offline_access,email,publish_stream'
|
|
29
|
+
|
|
30
|
+
Good minimum to have is "offline_access,email"
|
|
31
|
+
|
|
32
|
+
Create a migration file to add the columns:
|
|
33
|
+
|
|
34
|
+
add_column :users, :facebook_uid, :string
|
|
35
|
+
add_column :users, :facebook_token, :string
|
|
36
|
+
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
class Devise::FacebookConsumerController < ApplicationController
|
|
2
|
+
include Devise::Controllers::InternalHelpers
|
|
3
|
+
include DeviseOauth2Facebook::FacebookConsumerHelper
|
|
4
|
+
|
|
5
|
+
def auth
|
|
6
|
+
url = send("fb_#{resource_name}_callback_url".to_sym)
|
|
7
|
+
redirect_to facebook_client.authorization.authorize_url(:redirect_uri => url , :scope => Devise.facebook_permissions)
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def callback
|
|
11
|
+
# if resource_class.respond_to?(:serialize_into_cookie)
|
|
12
|
+
# User.first.remember_me!
|
|
13
|
+
# cookies.signed["remember_#{resource_name}_token"] = {
|
|
14
|
+
# :value => User.first.class.serialize_into_cookie(User.first),
|
|
15
|
+
# :expires => User.first.remember_expires_at,
|
|
16
|
+
# :path => "/"
|
|
17
|
+
# }
|
|
18
|
+
# end
|
|
19
|
+
# sign_in_and_redirect(resource_name, User.first)
|
|
20
|
+
# set_flash_message :notice, :signed_in
|
|
21
|
+
# return
|
|
22
|
+
url = send("fb_#{resource_name}_callback_url".to_sym)
|
|
23
|
+
|
|
24
|
+
client = facebook_client
|
|
25
|
+
client.authorization.process_callback(params[:code], :redirect_uri => url)
|
|
26
|
+
|
|
27
|
+
token = client.access_token
|
|
28
|
+
fb_user = client.selection.me.info!
|
|
29
|
+
|
|
30
|
+
# Rails.logger.info "FB USER:"
|
|
31
|
+
# Rails.logger.info fb_user.inspect
|
|
32
|
+
|
|
33
|
+
resource = resource_class.find_with_facebook_user(fb_user, token)
|
|
34
|
+
unless resource
|
|
35
|
+
resource = resource_class.create_with_facebook_user(fb_user, token)
|
|
36
|
+
end
|
|
37
|
+
if resource_class.respond_to?(:serialize_into_cookie)
|
|
38
|
+
resource.remember_me!
|
|
39
|
+
cookies.signed["remember_#{resource_name}_token"] = {
|
|
40
|
+
:value => resource.class.serialize_into_cookie(resource),
|
|
41
|
+
:expires => resource.remember_expires_at,
|
|
42
|
+
:path => "/"
|
|
43
|
+
}
|
|
44
|
+
end
|
|
45
|
+
set_flash_message :notice, :signed_in
|
|
46
|
+
sign_in_and_redirect(resource_name, resource)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
module DeviseOauth2Facebook::FacebookConsumerHelper
|
|
2
|
+
|
|
3
|
+
def facebook_client(token = nil)
|
|
4
|
+
if token.present?
|
|
5
|
+
FBGraph::Client.new(:client_id => Devise.facebook_api_key, :secret_id => Devise.facebook_api_secret)
|
|
6
|
+
else
|
|
7
|
+
FBGraph::Client.new(:client_id => Devise.facebook_api_key, :secret_id => Devise.facebook_api_secret, :token => token)
|
|
8
|
+
end
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
module Devise
|
|
2
|
+
module Models
|
|
3
|
+
|
|
4
|
+
module DeviseOauth2Facebook
|
|
5
|
+
extend ActiveSupport::Concern
|
|
6
|
+
|
|
7
|
+
def do_update_facebook_user(fb_user, token)
|
|
8
|
+
self.send("#{self.class.facebook_uid_field}=".to_sym, fb_user.id)
|
|
9
|
+
self.send("#{self.class.facebook_token_field}=".to_sym, token)
|
|
10
|
+
self.email = fb_user.email.to_s.downcase if fb_user.respond_to?(:email)
|
|
11
|
+
update_facebook_user(fb_user)
|
|
12
|
+
self.save_without_validation
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
def update_facebook_user(fb_user)
|
|
16
|
+
# override me
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
def active?
|
|
20
|
+
true
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
protected
|
|
24
|
+
|
|
25
|
+
module ClassMethods
|
|
26
|
+
Devise::Models.config(self, :facebook_uid_field, :facebook_token_field)
|
|
27
|
+
|
|
28
|
+
def find_with_facebook_user(fb_user, token)
|
|
29
|
+
user = where(facebook_uid_field.to_sym => fb_user.id).first || where(:email => fb_user.email.downcase).first
|
|
30
|
+
if user
|
|
31
|
+
user.do_update_facebook_user(fb_user, token)
|
|
32
|
+
end
|
|
33
|
+
user
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def create_with_facebook_user(fb_user, token)
|
|
37
|
+
user = new(facebook_uid_field.to_sym => fb_user.id, :password => "fakepass", :password_confirmation => "fakepass")
|
|
38
|
+
user.skip_confirmation! if user.respond_to?(:skip_confirmation!)
|
|
39
|
+
user.do_update_facebook_user(fb_user, token)
|
|
40
|
+
user
|
|
41
|
+
end
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
ActionDispatch::Routing::Mapper.class_eval do
|
|
2
|
+
|
|
3
|
+
protected
|
|
4
|
+
|
|
5
|
+
def devise_facebook_consumer(mapping, controllers)
|
|
6
|
+
scope mapping.full_path do
|
|
7
|
+
get mapping.path_names[:fb_auth], :to => "#{controllers[:facebook_consumer]}#auth", :as => :"fb_#{mapping.name}_auth"
|
|
8
|
+
get mapping.path_names[:fb_callback], :to => "#{controllers[:facebook_consumer]}#callback", :as => :"fb_#{mapping.name}_callback"
|
|
9
|
+
end
|
|
10
|
+
end
|
|
11
|
+
end
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
require 'devise'
|
|
2
|
+
require 'fbgraph'
|
|
3
|
+
|
|
4
|
+
require 'devise_oauth2_facebook/engine'
|
|
5
|
+
|
|
6
|
+
module Devise
|
|
7
|
+
mattr_accessor :facebook_uid_field
|
|
8
|
+
@@facebook_uid_field = :facebook_uid
|
|
9
|
+
|
|
10
|
+
mattr_accessor :facebook_token_field
|
|
11
|
+
@@facebook_token_field = :facebook_token
|
|
12
|
+
|
|
13
|
+
mattr_accessor :facebook_api_key
|
|
14
|
+
@@facebook_api_key = nil
|
|
15
|
+
|
|
16
|
+
mattr_accessor :facebook_api_secret
|
|
17
|
+
@@facebook_api_secret = nil
|
|
18
|
+
|
|
19
|
+
mattr_accessor :facebook_permissions
|
|
20
|
+
@@facebook_permissions = 'offline_access,email'
|
|
21
|
+
|
|
22
|
+
mattr_accessor :facebook_callback_url
|
|
23
|
+
@@facebook_callback_url = nil
|
|
24
|
+
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
Devise.add_module(:devise_oauth2_facebook,
|
|
28
|
+
:strategy => false,
|
|
29
|
+
:controller => :facebook_consumer,
|
|
30
|
+
:route => :facebook_consumer,
|
|
31
|
+
:model => 'devise_oauth2_facebook/model'
|
|
32
|
+
)
|
metadata
ADDED
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
|
2
|
+
name: devise_oauth2_facebook
|
|
3
|
+
version: !ruby/object:Gem::Version
|
|
4
|
+
hash: 79
|
|
5
|
+
prerelease: false
|
|
6
|
+
segments:
|
|
7
|
+
- 0
|
|
8
|
+
- 1
|
|
9
|
+
- 42
|
|
10
|
+
version: 0.1.42
|
|
11
|
+
platform: ruby
|
|
12
|
+
authors:
|
|
13
|
+
- Mooktakim Ahmed
|
|
14
|
+
autorequire:
|
|
15
|
+
bindir: bin
|
|
16
|
+
cert_chain: []
|
|
17
|
+
|
|
18
|
+
date: 2010-06-11 00:00:00 +01:00
|
|
19
|
+
default_executable:
|
|
20
|
+
dependencies:
|
|
21
|
+
- !ruby/object:Gem::Dependency
|
|
22
|
+
name: devise
|
|
23
|
+
prerelease: false
|
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
|
25
|
+
none: false
|
|
26
|
+
requirements:
|
|
27
|
+
- - ">="
|
|
28
|
+
- !ruby/object:Gem::Version
|
|
29
|
+
hash: 3
|
|
30
|
+
segments:
|
|
31
|
+
- 0
|
|
32
|
+
version: "0"
|
|
33
|
+
type: :runtime
|
|
34
|
+
version_requirements: *id001
|
|
35
|
+
- !ruby/object:Gem::Dependency
|
|
36
|
+
name: fbgraph
|
|
37
|
+
prerelease: false
|
|
38
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
|
39
|
+
none: false
|
|
40
|
+
requirements:
|
|
41
|
+
- - ">="
|
|
42
|
+
- !ruby/object:Gem::Version
|
|
43
|
+
hash: 3
|
|
44
|
+
segments:
|
|
45
|
+
- 0
|
|
46
|
+
version: "0"
|
|
47
|
+
type: :runtime
|
|
48
|
+
version_requirements: *id002
|
|
49
|
+
description:
|
|
50
|
+
email: mooktakim@fluxter.co.uk
|
|
51
|
+
executables: []
|
|
52
|
+
|
|
53
|
+
extensions: []
|
|
54
|
+
|
|
55
|
+
extra_rdoc_files:
|
|
56
|
+
- README
|
|
57
|
+
files:
|
|
58
|
+
- README
|
|
59
|
+
- app/controllers/devise/facebook_consumer_controller.rb
|
|
60
|
+
- config/locales/en.yml
|
|
61
|
+
- lib/devise_oauth2_facebook.rb
|
|
62
|
+
- lib/devise_oauth2_facebook/engine.rb
|
|
63
|
+
- lib/devise_oauth2_facebook/facebook_consumer_helper.rb
|
|
64
|
+
- lib/devise_oauth2_facebook/model.rb
|
|
65
|
+
- lib/devise_oauth2_facebook/routes.rb
|
|
66
|
+
has_rdoc: true
|
|
67
|
+
homepage: http://github.com/mooktakim/devise_oauth2_facebook
|
|
68
|
+
licenses: []
|
|
69
|
+
|
|
70
|
+
post_install_message:
|
|
71
|
+
rdoc_options:
|
|
72
|
+
- --charset=UTF-8
|
|
73
|
+
require_paths:
|
|
74
|
+
- lib
|
|
75
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
|
+
none: false
|
|
77
|
+
requirements:
|
|
78
|
+
- - ">="
|
|
79
|
+
- !ruby/object:Gem::Version
|
|
80
|
+
hash: 3
|
|
81
|
+
segments:
|
|
82
|
+
- 0
|
|
83
|
+
version: "0"
|
|
84
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
|
+
none: false
|
|
86
|
+
requirements:
|
|
87
|
+
- - ">="
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
hash: 3
|
|
90
|
+
segments:
|
|
91
|
+
- 0
|
|
92
|
+
version: "0"
|
|
93
|
+
requirements: []
|
|
94
|
+
|
|
95
|
+
rubyforge_project:
|
|
96
|
+
rubygems_version: 1.3.7
|
|
97
|
+
signing_key:
|
|
98
|
+
specification_version: 3
|
|
99
|
+
summary: Devise OAuth2 Facebook extension
|
|
100
|
+
test_files: []
|
|
101
|
+
|