omniauth-facebook 3.0.0 → 7.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/.github/workflows/stale.yml +23 -0
- data/.gitignore +1 -1
- data/.travis.yml +5 -11
- data/CHANGELOG.md +38 -9
- data/Gemfile +2 -0
- data/README.md +44 -60
- data/Rakefile +1 -1
- data/example/Gemfile +1 -1
- data/example/Gemfile.lock +40 -36
- data/example/app.rb +49 -56
- data/example/config.ru +2 -2
- data/lib/omniauth/facebook/version.rb +1 -1
- data/lib/omniauth/strategies/facebook.rb +16 -18
- data/test/helper.rb +2 -1
- data/test/strategy_test.rb +32 -38
- data/test/support/shared_examples.rb +7 -7
- metadata +16 -16
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e2f4d990ad5efff4639bceb6166326edde272c174245f543841bf513e6cb6e8a
|
4
|
+
data.tar.gz: 6b26e2b46ae31387b0c57596355838f231a926857db3a01e0b0cff27a39e7f2b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: eb8dd5746bdaf99f7541009a198c4bf1fea00eef655808bee2ef235ee52d593e06666a3251a05266d0b602b79d96604790d801ae7b2da72e2931dd17e0491348
|
7
|
+
data.tar.gz: 8c080431786e1c765e2457da31b6290f86602aff576139fcc8328160c516e0e4d4d557b68c406b1fb1fe85a5f83bdb47bc60d639fa0652088c4aa64aa4ed0275
|
@@ -0,0 +1,23 @@
|
|
1
|
+
name: Mark stale issues and pull requests
|
2
|
+
|
3
|
+
on:
|
4
|
+
schedule:
|
5
|
+
- cron: "0 0 * * *"
|
6
|
+
|
7
|
+
jobs:
|
8
|
+
stale:
|
9
|
+
|
10
|
+
runs-on: ubuntu-latest
|
11
|
+
|
12
|
+
steps:
|
13
|
+
- uses: actions/stale@v1
|
14
|
+
with:
|
15
|
+
repo-token: ${{ secrets.GITHUB_TOKEN }}
|
16
|
+
stale-issue-message: 'This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
|
17
|
+
stale-pr-message: 'This pull request has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.'
|
18
|
+
stale-issue-label: 'no-issue-activity'
|
19
|
+
stale-pr-label: 'no-pr-activity'
|
20
|
+
days-before-stale: 30
|
21
|
+
days-before-close: 5
|
22
|
+
exempt-pr-label: 'pinned'
|
23
|
+
exempt-issue-label: 'pinned'
|
data/.gitignore
CHANGED
data/.travis.yml
CHANGED
@@ -1,16 +1,10 @@
|
|
1
1
|
before_install:
|
2
2
|
- gem update bundler
|
3
3
|
- bundle --version
|
4
|
-
- gem update --system
|
4
|
+
- gem update --system
|
5
5
|
- gem --version
|
6
6
|
rvm:
|
7
|
-
-
|
8
|
-
-
|
9
|
-
-
|
10
|
-
- 2.
|
11
|
-
- 2.1
|
12
|
-
- jruby
|
13
|
-
- rbx
|
14
|
-
matrix:
|
15
|
-
allow_failures:
|
16
|
-
- rvm: rbx
|
7
|
+
- 2.6
|
8
|
+
- 2.5
|
9
|
+
- 2.4
|
10
|
+
- 2.3
|
data/CHANGELOG.md
CHANGED
@@ -1,29 +1,58 @@
|
|
1
|
+
## 7.0.0 (2020-08-03)
|
2
|
+
|
3
|
+
Changes:
|
4
|
+
|
5
|
+
- bumped version of FB Graph API to v4.0
|
6
|
+
|
7
|
+
## 6.0.0 (2020-01-27)
|
8
|
+
|
9
|
+
Changes:
|
10
|
+
|
11
|
+
- bumped version of FB Graph API to v3.0
|
12
|
+
|
13
|
+
## 5.0.0 (2018-03-29)
|
14
|
+
|
15
|
+
Changes:
|
16
|
+
|
17
|
+
- bumped version of FB Graph API to v2.10 (#297, @piotrjaworski)
|
18
|
+
- use only CRuby 2.0+ on CI (#298, @simi)
|
19
|
+
|
20
|
+
## 4.0.0 (2016-07-26)
|
21
|
+
|
22
|
+
Changes:
|
23
|
+
|
24
|
+
- drop support for Ruby < 1.9.3 (@mkdynamic)
|
25
|
+
- switch to versioned FB APIs, currently using v2.6 (#245, @printercu, @mkdynamic)
|
26
|
+
- remove deprecated :nickname field from README example (#223, @abelorian)
|
27
|
+
- add Ruby 2.2 + 2.3.0 to CI (#225, @tricknotes, @mkdynamic, @anoraak)
|
28
|
+
- update example app (@mkdynamic)
|
29
|
+
|
1
30
|
## 3.0.0 (2015-10-26)
|
2
31
|
|
3
32
|
Changes:
|
4
33
|
|
5
|
-
|
6
|
-
|
7
|
-
|
34
|
+
- remove query string from redirect_uri on callback by default (#221, @gioblu)
|
35
|
+
- signed request parsing extracted to `OmniAuth::Facebook::SignedRequest` class. (#183, @simi, @Vrael)
|
36
|
+
- change default value of `info_fields` to `name,email` for the [graph-api-v2.4](https://developers.facebook.com/blog/post/2015/07/08/graph-api-v2.4/). ([#209](https://github.com/mkdynamic/omniauth-facebook/pull/209))
|
8
37
|
|
9
38
|
## 2.0.1 (2015-02-21)
|
10
39
|
|
11
40
|
Bugfixes:
|
12
41
|
|
13
|
-
|
14
|
-
|
42
|
+
- allow versioning by not forcing absolute path for graph requests (#180, @frausto)
|
43
|
+
- allow the image_size option to be set as a symbol. (#182, @jgrau)
|
15
44
|
|
16
45
|
## 2.0.0 (2014-08-07)
|
17
46
|
|
18
47
|
Changes:
|
19
48
|
|
20
|
-
|
49
|
+
- remove support for canvas app flow (765ed9, @mkdynamic)
|
21
50
|
|
22
51
|
Bugfixes:
|
23
52
|
|
24
|
-
|
25
|
-
|
26
|
-
|
53
|
+
- bump omniauth-oauth2 dependency which addresses CVE-2012-6134 (#162, @linedotstar)
|
54
|
+
- rescue `NoAuthorizationCodeError` in callback_phase (a0036b, @tomoya55)
|
55
|
+
- fix CSRF exception when using FB JS SDK and parsing signed request (765ed9, @mkdynamic)
|
27
56
|
|
28
57
|
## 1.6.0 (2014-01-13)
|
29
58
|
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -1,16 +1,12 @@
|
|
1
|
-
|
2
|
-
More details [here](https://github.com/mkdynamic/omniauth-facebook/wiki/CSRF-vulnerability:-CVE-2013-4562), [here](https://github.com/mkdynamic/omniauth-facebook/wiki/Access-token-vulnerability:-CVE-2013-4593) and [here](http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2012-6134).**
|
3
|
-
|
4
|
-
---
|
5
|
-
|
6
|
-
# OmniAuth Facebook [![Build Status](https://secure.travis-ci.org/mkdynamic/omniauth-facebook.svg?branch=master)](https://travis-ci.org/mkdynamic/omniauth-facebook) [![Gem Version](https://img.shields.io/gem/v/omniauth-facebook.svg)](https://rubygems.org/gems/omniauth-facebook)
|
1
|
+
# OmniAuth Facebook [![Build Status](https://secure.travis-ci.org/simi/omniauth-facebook.svg?branch=master)](https://travis-ci.org/simi/omniauth-facebook) [![Gem Version](https://img.shields.io/gem/v/omniauth-facebook.svg)](https://rubygems.org/gems/omniauth-facebook)
|
7
2
|
|
3
|
+
📣 **NOTICE** We’re looking for maintainers to help keep this project up-to-date. If you are interested in helping please open an Issue expressing your interest. Thanks! 📣
|
8
4
|
|
9
5
|
**These notes are based on master, please see tags for README pertaining to specific releases.**
|
10
6
|
|
11
7
|
Facebook OAuth2 Strategy for OmniAuth.
|
12
8
|
|
13
|
-
Supports
|
9
|
+
Supports OAuth 2.0 server-side and client-side flows. Read the Facebook docs for more details: http://developers.facebook.com/docs/authentication
|
14
10
|
|
15
11
|
## Installing
|
16
12
|
|
@@ -30,11 +26,11 @@ Here's a quick example, adding the middleware to a Rails app in `config/initiali
|
|
30
26
|
|
31
27
|
```ruby
|
32
28
|
Rails.application.config.middleware.use OmniAuth::Builder do
|
33
|
-
provider :facebook, ENV['
|
29
|
+
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET']
|
34
30
|
end
|
35
31
|
```
|
36
32
|
|
37
|
-
[See the example Sinatra app for full examples](https://github.com/
|
33
|
+
[See the example Sinatra app for full examples](https://github.com/simi/omniauth-facebook/blob/master/example/config.ru) of both the server and client-side flows (including using the Facebook Javascript SDK).
|
38
34
|
|
39
35
|
## Configuring
|
40
36
|
|
@@ -45,7 +41,7 @@ Option name | Default | Explanation
|
|
45
41
|
`scope` | `email` | A comma-separated list of permissions you want to request from the user. See the Facebook docs for a full list of available permissions: https://developers.facebook.com/docs/reference/login/
|
46
42
|
`display` | `page` | The display context to show the authentication page. Options are: `page`, `popup` and `touch`. Read the Facebook docs for more details: https://developers.facebook.com/docs/reference/dialogs/oauth/
|
47
43
|
`image_size` | `square` | Set the size for the returned image url in the auth hash. Valid options include `square` (50x50), `small` (50 pixels wide, variable height), `normal` (100 pixels wide, variable height), or `large` (about 200 pixels wide, variable height). Additionally, you can request a picture of a specific size by setting this option to a hash with `:width` and `:height` as keys. This will return an available profile picture closest to the requested size and requested aspect ratio. If only `:width` or `:height` is specified, we will return a picture whose width or height is closest to the requested size, respectively.
|
48
|
-
`info_fields` |
|
44
|
+
`info_fields` | `name,email` | Specify exactly which fields should be returned when getting the user's info. Value should be a comma-separated string as per https://developers.facebook.com/docs/graph-api/reference/user/ (only `/me` endpoint).
|
49
45
|
`locale` | | Specify locale which should be used when getting the user's info. Value should be locale string as per https://developers.facebook.com/docs/reference/api/locale/.
|
50
46
|
`auth_type` | | Optionally specifies the requested authentication features as a comma-separated list, as per https://developers.facebook.com/docs/facebook-login/reauthentication/. Valid values are `https` (checks for the presence of the secure cookie and asks for re-authentication if it is not present), and `reauthenticate` (asks the user to re-authenticate unconditionally). Use 'rerequest' when you want to request premissions. Default is `nil`.
|
51
47
|
`secure_image_url` | `false` | Set to `true` to use https for the avatar image url returned in the auth hash.
|
@@ -55,24 +51,25 @@ For example, to request `email`, `user_birthday` and `read_stream` permissions a
|
|
55
51
|
|
56
52
|
```ruby
|
57
53
|
Rails.application.config.middleware.use OmniAuth::Builder do
|
58
|
-
provider :facebook, ENV['
|
59
|
-
|
54
|
+
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'],
|
55
|
+
scope: 'email,user_birthday,read_stream', display: 'popup'
|
60
56
|
end
|
61
57
|
```
|
62
58
|
|
63
59
|
### API Version
|
64
60
|
|
65
|
-
OmniAuth Facebook uses
|
61
|
+
OmniAuth Facebook uses versioned API endpoints by default (current v4.0). You can configure a different version via `client_options` hash passed to `provider`, specifically you should change the version in the `site` and `authorize_url` parameters. For example, to change to v7.0 (assuming that exists):
|
66
62
|
|
67
63
|
```ruby
|
68
64
|
use OmniAuth::Builder do
|
69
|
-
provider :facebook, ENV['
|
70
|
-
:
|
71
|
-
:
|
72
|
-
:
|
65
|
+
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET'],
|
66
|
+
client_options: {
|
67
|
+
site: 'https://graph.facebook.com/v7.0',
|
68
|
+
authorize_url: "https://www.facebook.com/v7.0/dialog/oauth"
|
73
69
|
}
|
74
70
|
end
|
75
71
|
```
|
72
|
+
|
76
73
|
### Per-Request Options
|
77
74
|
|
78
75
|
If you want to set the `display` format, `auth_type`, or `scope` on a per-request basis, you can just pass it to the OmniAuth request phase URL, for example: `/auth/facebook?display=popup` or `/auth/facebook?scope=email`.
|
@@ -83,39 +80,37 @@ Here's an example *Auth Hash* available in `request.env['omniauth.auth']`:
|
|
83
80
|
|
84
81
|
```ruby
|
85
82
|
{
|
86
|
-
:
|
87
|
-
:
|
88
|
-
:
|
89
|
-
:
|
90
|
-
:
|
91
|
-
:
|
92
|
-
:
|
93
|
-
:
|
94
|
-
:
|
95
|
-
:urls => { :Facebook => 'http://www.facebook.com/jbloggs' },
|
96
|
-
:location => 'Palo Alto, California',
|
97
|
-
:verified => true
|
83
|
+
provider: 'facebook',
|
84
|
+
uid: '1234567',
|
85
|
+
info: {
|
86
|
+
email: 'joe@bloggs.com',
|
87
|
+
name: 'Joe Bloggs',
|
88
|
+
first_name: 'Joe',
|
89
|
+
last_name: 'Bloggs',
|
90
|
+
image: 'http://graph.facebook.com/1234567/picture?type=square',
|
91
|
+
verified: true
|
98
92
|
},
|
99
|
-
:
|
100
|
-
:
|
101
|
-
:
|
102
|
-
:
|
93
|
+
credentials: {
|
94
|
+
token: 'ABCDEF...', # OAuth 2.0 access_token, which you may wish to store
|
95
|
+
expires_at: 1321747205, # when the access token expires (it always will)
|
96
|
+
expires: true # this will always be true
|
103
97
|
},
|
104
|
-
:
|
105
|
-
:
|
106
|
-
:
|
107
|
-
:
|
108
|
-
:
|
109
|
-
:
|
110
|
-
:
|
111
|
-
:
|
112
|
-
:
|
113
|
-
:
|
114
|
-
:
|
115
|
-
:
|
116
|
-
:
|
117
|
-
:
|
118
|
-
:
|
98
|
+
extra: {
|
99
|
+
raw_info: {
|
100
|
+
id: '1234567',
|
101
|
+
name: 'Joe Bloggs',
|
102
|
+
first_name: 'Joe',
|
103
|
+
last_name: 'Bloggs',
|
104
|
+
link: 'http://www.facebook.com/jbloggs',
|
105
|
+
username: 'jbloggs',
|
106
|
+
location: { id: '123456789', name: 'Palo Alto, California' },
|
107
|
+
gender: 'male',
|
108
|
+
email: 'joe@bloggs.com',
|
109
|
+
timezone: -8,
|
110
|
+
locale: 'en_US',
|
111
|
+
verified: true,
|
112
|
+
updated_time: '2011-11-11T06:21:03+0000',
|
113
|
+
# ...
|
119
114
|
}
|
120
115
|
}
|
121
116
|
}
|
@@ -157,15 +152,7 @@ If you use the server-side flow, Facebook will give you back a longer lived acce
|
|
157
152
|
|
158
153
|
## Supported Rubies
|
159
154
|
|
160
|
-
|
161
|
-
|
162
|
-
- MRI 2.1.0
|
163
|
-
- MRI 2.0.0
|
164
|
-
- MRI 1.9.3
|
165
|
-
- MRI 1.9.2
|
166
|
-
- MRI 1.8.7
|
167
|
-
- JRuby 1.7.9
|
168
|
-
- Rubinius (latest stable)
|
155
|
+
- Ruby MRI (2.3, 2.4, 2.5, 2.6)
|
169
156
|
|
170
157
|
## License
|
171
158
|
|
@@ -176,6 +163,3 @@ Permission is hereby granted, free of charge, to any person obtaining a copy of
|
|
176
163
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
177
164
|
|
178
165
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
179
|
-
|
180
|
-
|
181
|
-
[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/mkdynamic/omniauth-facebook/trend.png)](https://bitdeli.com/free "Bitdeli Badge")
|
data/Rakefile
CHANGED
data/example/Gemfile
CHANGED
data/example/Gemfile.lock
CHANGED
@@ -1,58 +1,62 @@
|
|
1
1
|
PATH
|
2
|
-
remote:
|
2
|
+
remote: ..
|
3
3
|
specs:
|
4
|
-
omniauth-facebook (
|
4
|
+
omniauth-facebook (6.0.0)
|
5
5
|
omniauth-oauth2 (~> 1.2)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
9
9
|
specs:
|
10
|
-
backports (3.
|
11
|
-
faraday (0.
|
10
|
+
backports (3.15.0)
|
11
|
+
faraday (1.0.0)
|
12
12
|
multipart-post (>= 1.2, < 3)
|
13
|
-
hashie (3.
|
14
|
-
jwt (
|
15
|
-
multi_json (1.
|
16
|
-
multi_xml (0.
|
17
|
-
multipart-post (2.
|
18
|
-
|
19
|
-
|
20
|
-
|
13
|
+
hashie (3.6.0)
|
14
|
+
jwt (2.2.1)
|
15
|
+
multi_json (1.14.1)
|
16
|
+
multi_xml (0.6.0)
|
17
|
+
multipart-post (2.1.1)
|
18
|
+
mustermann (1.1.1)
|
19
|
+
ruby2_keywords (~> 0.0.1)
|
20
|
+
oauth2 (1.4.2)
|
21
|
+
faraday (>= 0.8, < 2.0)
|
22
|
+
jwt (>= 1.0, < 3.0)
|
21
23
|
multi_json (~> 1.3)
|
22
24
|
multi_xml (~> 0.5)
|
23
|
-
rack (
|
24
|
-
omniauth (1.
|
25
|
-
hashie (>=
|
26
|
-
rack (
|
27
|
-
omniauth-oauth2 (1.
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
rack (1.5.2)
|
33
|
-
rack-protection (1.5.1)
|
25
|
+
rack (>= 1.2, < 3)
|
26
|
+
omniauth (1.9.0)
|
27
|
+
hashie (>= 3.4.6, < 3.7.0)
|
28
|
+
rack (>= 1.6.2, < 3)
|
29
|
+
omniauth-oauth2 (1.6.0)
|
30
|
+
oauth2 (~> 1.1)
|
31
|
+
omniauth (~> 1.9)
|
32
|
+
rack (2.1.1)
|
33
|
+
rack-protection (2.0.8.1)
|
34
34
|
rack
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
rack (~>
|
39
|
-
rack-protection (
|
40
|
-
tilt (~>
|
41
|
-
sinatra-contrib (
|
42
|
-
backports (>= 2.
|
35
|
+
ruby2_keywords (0.0.2)
|
36
|
+
sinatra (2.0.8.1)
|
37
|
+
mustermann (~> 1.0)
|
38
|
+
rack (~> 2.0)
|
39
|
+
rack-protection (= 2.0.8.1)
|
40
|
+
tilt (~> 2.0)
|
41
|
+
sinatra-contrib (2.0.8.1)
|
42
|
+
backports (>= 2.8.2)
|
43
43
|
multi_json
|
44
|
-
|
45
|
-
rack-
|
46
|
-
sinatra (
|
47
|
-
tilt (~>
|
44
|
+
mustermann (~> 1.0)
|
45
|
+
rack-protection (= 2.0.8.1)
|
46
|
+
sinatra (= 2.0.8.1)
|
47
|
+
tilt (~> 2.0)
|
48
48
|
sinatra-reloader (1.0)
|
49
49
|
sinatra-contrib
|
50
|
-
tilt (
|
50
|
+
tilt (2.0.10)
|
51
51
|
|
52
52
|
PLATFORMS
|
53
53
|
ruby
|
54
|
+
x64-mingw32
|
54
55
|
|
55
56
|
DEPENDENCIES
|
56
57
|
omniauth-facebook!
|
57
58
|
sinatra
|
58
59
|
sinatra-reloader
|
60
|
+
|
61
|
+
BUNDLED WITH
|
62
|
+
1.17.2
|
data/example/app.rb
CHANGED
@@ -1,93 +1,86 @@
|
|
1
1
|
require 'sinatra'
|
2
2
|
require "sinatra/reloader"
|
3
3
|
require 'yaml'
|
4
|
+
require 'json'
|
4
5
|
|
5
6
|
# configure sinatra
|
6
7
|
set :run, false
|
7
8
|
set :raise_errors, true
|
8
9
|
|
9
|
-
#
|
10
|
-
log = File.new("app.log", "a+")
|
11
|
-
$stdout.reopen(log)
|
12
|
-
$stderr.reopen(log)
|
13
|
-
$stderr.sync = true
|
14
|
-
$stdout.sync = true
|
15
|
-
|
16
|
-
# server-side flow
|
10
|
+
# REQUEST STEP (server-side flow)
|
17
11
|
get '/server-side' do
|
18
|
-
# NOTE: You would just hit this endpoint directly from the browser in a real app. The redirect is
|
19
|
-
# explicit declare this server-side flow.
|
12
|
+
# NOTE: You would just hit this endpoint directly from the browser in a real app. The redirect is
|
13
|
+
# just here to explicit declare this server-side flow.
|
20
14
|
redirect '/auth/facebook'
|
21
15
|
end
|
22
16
|
|
23
|
-
# client-side flow
|
17
|
+
# REQUEST STEP (client-side flow)
|
24
18
|
get '/client-side' do
|
25
19
|
content_type 'text/html'
|
26
|
-
# NOTE: When you enable cookie below in the FB.init call the GET request in the FB.login callback
|
27
|
-
# request in a cookie back the OmniAuth callback which will parse out the
|
28
|
-
# access_token with it.
|
29
|
-
<<-
|
20
|
+
# NOTE: When you enable cookie below in the FB.init call the GET request in the FB.login callback
|
21
|
+
# will send a signed request in a cookie back the OmniAuth callback which will parse out the
|
22
|
+
# authorization code and obtain an access_token with it.
|
23
|
+
<<-HTML
|
30
24
|
<html>
|
31
25
|
<head>
|
32
26
|
<title>Client-side Flow Example</title>
|
33
|
-
<script src="https://ajax.googleapis.com/ajax/libs/jquery/
|
34
|
-
</head>
|
35
|
-
<body>
|
36
|
-
<div id="fb-root"></div>
|
37
|
-
|
27
|
+
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.2/jquery.min.js" type="text/javascript"></script>
|
38
28
|
<script type="text/javascript">
|
39
29
|
window.fbAsyncInit = function() {
|
40
30
|
FB.init({
|
41
|
-
appId
|
42
|
-
|
43
|
-
cookie
|
44
|
-
xfbml : true // parse XFBML
|
31
|
+
appId: '#{ENV['FACEBOOK_APP_ID']}',
|
32
|
+
version: 'v4.0',
|
33
|
+
cookie: true // IMPORTANT must enable cookies to allow the server to access the session
|
45
34
|
});
|
35
|
+
console.log("fb init");
|
46
36
|
};
|
47
37
|
|
48
|
-
(function(d)
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
$(function() {
|
56
|
-
$('a').click(function(e) {
|
57
|
-
e.preventDefault();
|
58
|
-
|
59
|
-
FB.login(function(response) {
|
60
|
-
if (response.authResponse) {
|
61
|
-
$('#connect').html('Connected! Hitting OmniAuth callback (GET /auth/facebook/callback)...');
|
62
|
-
|
63
|
-
// since we have cookies enabled, this request will allow omniauth to parse
|
64
|
-
// out the auth code from the signed request in the fbsr_XXX cookie
|
65
|
-
$.getJSON('/auth/facebook/callback', function(json) {
|
66
|
-
$('#connect').html('Connected! Callback complete.');
|
67
|
-
$('#results').html(JSON.stringify(json));
|
68
|
-
});
|
69
|
-
}
|
70
|
-
}, { scope: 'email,read_stream', state: 'abc123' });
|
71
|
-
});
|
72
|
-
});
|
38
|
+
(function(d, s, id){
|
39
|
+
var js, fjs = d.getElementsByTagName(s)[0];
|
40
|
+
if (d.getElementById(id)) {return;}
|
41
|
+
js = d.createElement(s); js.id = id;
|
42
|
+
js.src = "//connect.facebook.net/en_US/sdk.js";
|
43
|
+
fjs.parentNode.insertBefore(js, fjs);
|
44
|
+
}(document, 'script', 'facebook-jssdk'));
|
73
45
|
</script>
|
46
|
+
</head>
|
47
|
+
<body>
|
48
|
+
<div id="fb-root"></div>
|
74
49
|
|
75
50
|
<p id="connect">
|
76
51
|
<a href="#">Connect to FB!</a>
|
77
52
|
</p>
|
78
53
|
|
79
54
|
<p id="results" />
|
55
|
+
|
56
|
+
<script type="text/javascript">
|
57
|
+
$('a').click(function(e) {
|
58
|
+
e.preventDefault();
|
59
|
+
|
60
|
+
FB.login(function(response) {
|
61
|
+
console.log(response);
|
62
|
+
if (response.authResponse) {
|
63
|
+
$('#connect').html('Connected! Hitting OmniAuth callback (GET /auth/facebook/callback)...');
|
64
|
+
|
65
|
+
// since we have cookies enabled, this request will allow omniauth to parse
|
66
|
+
// out the auth code from the signed request in the fbsr_XXX cookie
|
67
|
+
$.getJSON('/auth/facebook/callback', function(json) {
|
68
|
+
$('#connect').html('Connected! Callback complete.');
|
69
|
+
$('#results').html(JSON.stringify(json));
|
70
|
+
});
|
71
|
+
}
|
72
|
+
}); // if you want custom scopes, pass them as an extra, final argument to FB.login
|
73
|
+
});
|
74
|
+
</script>
|
80
75
|
</body>
|
81
76
|
</html>
|
82
|
-
|
77
|
+
HTML
|
83
78
|
end
|
84
79
|
|
80
|
+
# CALLBACK STEP
|
81
|
+
# - redirected here for server-side flow
|
82
|
+
# - ajax request made here for client-side flow
|
85
83
|
get '/auth/:provider/callback' do
|
86
84
|
content_type 'application/json'
|
87
|
-
|
88
|
-
end
|
89
|
-
|
90
|
-
get '/auth/failure' do
|
91
|
-
content_type 'application/json'
|
92
|
-
MultiJson.encode(request.env)
|
85
|
+
JSON.dump(request.env)
|
93
86
|
end
|
data/example/config.ru
CHANGED
@@ -2,10 +2,10 @@ require 'bundler/setup'
|
|
2
2
|
require 'omniauth-facebook'
|
3
3
|
require './app.rb'
|
4
4
|
|
5
|
-
use Rack::Session::Cookie, :
|
5
|
+
use Rack::Session::Cookie, secret: 'abc123'
|
6
6
|
|
7
7
|
use OmniAuth::Builder do
|
8
|
-
provider :facebook, ENV['
|
8
|
+
provider :facebook, ENV['FACEBOOK_APP_ID'], ENV['FACEBOOK_APP_SECRET']
|
9
9
|
end
|
10
10
|
|
11
11
|
run Sinatra::Application
|
@@ -12,20 +12,18 @@ module OmniAuth
|
|
12
12
|
DEFAULT_SCOPE = 'email'
|
13
13
|
|
14
14
|
option :client_options, {
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
}
|
19
|
-
|
20
|
-
option :token_params, {
|
21
|
-
:parse => :query
|
15
|
+
site: 'https://graph.facebook.com/v4.0',
|
16
|
+
authorize_url: "https://www.facebook.com/v4.0/dialog/oauth",
|
17
|
+
token_url: 'oauth/access_token'
|
22
18
|
}
|
23
19
|
|
24
20
|
option :access_token_options, {
|
25
|
-
:
|
26
|
-
:
|
21
|
+
header_format: 'OAuth %s',
|
22
|
+
param_name: 'access_token'
|
27
23
|
}
|
28
24
|
|
25
|
+
option :authorization_code_from_signed_request_in_cookie, nil
|
26
|
+
|
29
27
|
option :authorize_options, [:scope, :display, :auth_type]
|
30
28
|
|
31
29
|
uid { raw_info['id'] }
|
@@ -59,11 +57,11 @@ module OmniAuth
|
|
59
57
|
end
|
60
58
|
|
61
59
|
def info_options
|
62
|
-
params = {:
|
63
|
-
params.merge!({:
|
64
|
-
params.merge!({:
|
60
|
+
params = {appsecret_proof: appsecret_proof}
|
61
|
+
params.merge!({fields: (options[:info_fields] || 'name,email')})
|
62
|
+
params.merge!({locale: options[:locale]}) if options[:locale]
|
65
63
|
|
66
|
-
{ :
|
64
|
+
{ params: params }
|
67
65
|
end
|
68
66
|
|
69
67
|
def callback_phase
|
@@ -80,7 +78,7 @@ module OmniAuth
|
|
80
78
|
# phase and it must match during the access_token phase:
|
81
79
|
# https://github.com/facebook/facebook-php-sdk/blob/master/src/base_facebook.php#L477
|
82
80
|
def callback_url
|
83
|
-
if
|
81
|
+
if options.authorization_code_from_signed_request_in_cookie
|
84
82
|
''
|
85
83
|
else
|
86
84
|
# Fixes regression in omniauth-oauth2 v1.4.0 by https://github.com/intridea/omniauth-oauth2/commit/85fdbe117c2a4400d001a6368cc359d88f40abc7
|
@@ -135,7 +133,7 @@ module OmniAuth
|
|
135
133
|
yield
|
136
134
|
elsif code_from_signed_request = signed_request_from_cookie && signed_request_from_cookie['code']
|
137
135
|
request.params['code'] = code_from_signed_request
|
138
|
-
|
136
|
+
options.authorization_code_from_signed_request_in_cookie = true
|
139
137
|
# NOTE The code from the signed fbsr_XXX cookie is set by the FB JS SDK will confirm that the identity of the
|
140
138
|
# user contained in the signed request matches the user loading the app.
|
141
139
|
original_provider_ignores_state = options.provider_ignores_state
|
@@ -144,7 +142,7 @@ module OmniAuth
|
|
144
142
|
yield
|
145
143
|
ensure
|
146
144
|
request.params.delete('code')
|
147
|
-
|
145
|
+
options.authorization_code_from_signed_request_in_cookie = false
|
148
146
|
options.provider_ignores_state = original_provider_ignores_state
|
149
147
|
end
|
150
148
|
else
|
@@ -162,10 +160,10 @@ module OmniAuth
|
|
162
160
|
def image_url(uid, options)
|
163
161
|
uri_class = options[:secure_image_url] ? URI::HTTPS : URI::HTTP
|
164
162
|
site_uri = URI.parse(client.site)
|
165
|
-
url = uri_class.build({:
|
163
|
+
url = uri_class.build({host: site_uri.host, path: "#{site_uri.path}/#{uid}/picture"})
|
166
164
|
|
167
165
|
query = if options[:image_size].is_a?(String) || options[:image_size].is_a?(Symbol)
|
168
|
-
{ :
|
166
|
+
{ type: options[:image_size] }
|
169
167
|
elsif options[:image_size].is_a?(Hash)
|
170
168
|
options[:image_size]
|
171
169
|
end
|
data/test/helper.rb
CHANGED
@@ -41,6 +41,7 @@ class StrategyTestCase < TestCase
|
|
41
41
|
|
42
42
|
@client_id = '123'
|
43
43
|
@client_secret = '53cr3tz'
|
44
|
+
@options = {}
|
44
45
|
end
|
45
46
|
|
46
47
|
def strategy
|
@@ -53,4 +54,4 @@ class StrategyTestCase < TestCase
|
|
53
54
|
end
|
54
55
|
end
|
55
56
|
|
56
|
-
Dir[File.expand_path('../support/**/*', __FILE__)].each
|
57
|
+
Dir[File.expand_path('../support/**/*', __FILE__)].each(&method(:require))
|
data/test/strategy_test.rb
CHANGED
@@ -9,15 +9,15 @@ end
|
|
9
9
|
|
10
10
|
class ClientTest < StrategyTestCase
|
11
11
|
test 'has correct Facebook site' do
|
12
|
-
assert_equal 'https://graph.facebook.com', strategy.client.site
|
12
|
+
assert_equal 'https://graph.facebook.com/v4.0', strategy.client.site
|
13
13
|
end
|
14
14
|
|
15
15
|
test 'has correct authorize url' do
|
16
|
-
assert_equal 'https://www.facebook.com/dialog/oauth', strategy.client.options[:authorize_url]
|
16
|
+
assert_equal 'https://www.facebook.com/v4.0/dialog/oauth', strategy.client.options[:authorize_url]
|
17
17
|
end
|
18
18
|
|
19
19
|
test 'has correct token url with versioning' do
|
20
|
-
@options = {:
|
20
|
+
@options = {client_options: {site: 'https://graph.facebook.net/v2.2'}}
|
21
21
|
assert_equal 'oauth/access_token', strategy.client.options[:token_url]
|
22
22
|
assert_equal 'https://graph.facebook.net/v2.2/oauth/access_token', strategy.client.token_url
|
23
23
|
end
|
@@ -33,7 +33,7 @@ class CallbackUrlTest < StrategyTestCase
|
|
33
33
|
end
|
34
34
|
|
35
35
|
test "returns path from callback_path option (omitting querystring)" do
|
36
|
-
@options = { :
|
36
|
+
@options = { callback_path: "/auth/FB/done"}
|
37
37
|
url_base = 'http://auth.request.com'
|
38
38
|
@request.stubs(:url).returns("#{url_base}/page/path")
|
39
39
|
strategy.stubs(:script_name).returns('') # as not to depend on Rack env
|
@@ -43,7 +43,7 @@ class CallbackUrlTest < StrategyTestCase
|
|
43
43
|
|
44
44
|
test "returns url from callback_url option" do
|
45
45
|
url = 'https://auth.myapp.com/auth/fb/callback'
|
46
|
-
@options = { :
|
46
|
+
@options = { callback_url: url }
|
47
47
|
assert_equal url, strategy.callback_url
|
48
48
|
end
|
49
49
|
end
|
@@ -73,12 +73,6 @@ class AuthorizeParamsTest < StrategyTestCase
|
|
73
73
|
end
|
74
74
|
end
|
75
75
|
|
76
|
-
class TokeParamsTest < StrategyTestCase
|
77
|
-
test 'has correct parse strategy' do
|
78
|
-
assert_equal :query, strategy.token_params[:parse]
|
79
|
-
end
|
80
|
-
end
|
81
|
-
|
82
76
|
class AccessTokenOptionsTest < StrategyTestCase
|
83
77
|
test 'has correct param name by default' do
|
84
78
|
assert_equal 'access_token', strategy.access_token_options[:param_name]
|
@@ -102,40 +96,40 @@ end
|
|
102
96
|
|
103
97
|
class InfoTest < StrategyTestCase
|
104
98
|
test 'returns the secure facebook avatar url when `secure_image_url` option is specified' do
|
105
|
-
@options = { :
|
99
|
+
@options = { secure_image_url: true }
|
106
100
|
raw_info = { 'name' => 'Fred Smith', 'id' => '321' }
|
107
101
|
strategy.stubs(:raw_info).returns(raw_info)
|
108
|
-
assert_equal 'https://graph.facebook.com/321/picture', strategy.info['image']
|
102
|
+
assert_equal 'https://graph.facebook.com/v4.0/321/picture', strategy.info['image']
|
109
103
|
end
|
110
104
|
|
111
105
|
test 'returns the image_url based of the client site' do
|
112
|
-
@options = { :
|
106
|
+
@options = { secure_image_url: true, client_options: {site: "https://blah.facebook.com/v2.2"}}
|
113
107
|
raw_info = { 'name' => 'Fred Smith', 'id' => '321' }
|
114
108
|
strategy.stubs(:raw_info).returns(raw_info)
|
115
109
|
assert_equal 'https://blah.facebook.com/v2.2/321/picture', strategy.info['image']
|
116
110
|
end
|
117
111
|
|
118
112
|
test 'returns the image with size specified in the `image_size` option' do
|
119
|
-
@options = { :
|
113
|
+
@options = { image_size: 'normal' }
|
120
114
|
raw_info = { 'name' => 'Fred Smith', 'id' => '321' }
|
121
115
|
strategy.stubs(:raw_info).returns(raw_info)
|
122
|
-
assert_equal 'http://graph.facebook.com/321/picture?type=normal', strategy.info['image']
|
116
|
+
assert_equal 'http://graph.facebook.com/v4.0/321/picture?type=normal', strategy.info['image']
|
123
117
|
end
|
124
118
|
|
125
119
|
test 'returns the image with size specified as a symbol in the `image_size` option' do
|
126
|
-
@options = { :
|
120
|
+
@options = { image_size: :normal }
|
127
121
|
raw_info = { 'name' => 'Fred Smith', 'id' => '321' }
|
128
122
|
strategy.stubs(:raw_info).returns(raw_info)
|
129
|
-
assert_equal 'http://graph.facebook.com/321/picture?type=normal', strategy.info['image']
|
123
|
+
assert_equal 'http://graph.facebook.com/v4.0/321/picture?type=normal', strategy.info['image']
|
130
124
|
end
|
131
125
|
|
132
126
|
test 'returns the image with width and height specified in the `image_size` option' do
|
133
|
-
@options = { :
|
127
|
+
@options = { image_size: { width: 123, height: 987 } }
|
134
128
|
raw_info = { 'name' => 'Fred Smith', 'id' => '321' }
|
135
129
|
strategy.stubs(:raw_info).returns(raw_info)
|
136
130
|
assert_match 'width=123', strategy.info['image']
|
137
131
|
assert_match 'height=987', strategy.info['image']
|
138
|
-
assert_match 'http://graph.facebook.com/321/picture?', strategy.info['image']
|
132
|
+
assert_match 'http://graph.facebook.com/v4.0/321/picture?', strategy.info['image']
|
139
133
|
end
|
140
134
|
end
|
141
135
|
|
@@ -182,7 +176,7 @@ class InfoTestOptionalDataPresent < StrategyTestCase
|
|
182
176
|
|
183
177
|
test 'returns the facebook avatar url' do
|
184
178
|
@raw_info['id'] = '321'
|
185
|
-
assert_equal 'http://graph.facebook.com/321/picture', strategy.info['image']
|
179
|
+
assert_equal 'http://graph.facebook.com/v4.0/321/picture', strategy.info['image']
|
186
180
|
end
|
187
181
|
|
188
182
|
test 'returns the Facebook link as the Facebook url' do
|
@@ -261,39 +255,39 @@ class RawInfoTest < StrategyTestCase
|
|
261
255
|
super
|
262
256
|
@access_token = stub('OAuth2::AccessToken')
|
263
257
|
@appsecret_proof = 'appsecret_proof'
|
264
|
-
@options = {:
|
258
|
+
@options = {appsecret_proof: @appsecret_proof, fields: 'name,email'}
|
265
259
|
end
|
266
260
|
|
267
|
-
test 'performs a GET to https://graph.facebook.com/me' do
|
261
|
+
test 'performs a GET to https://graph.facebook.com/v4.0/me' do
|
268
262
|
strategy.stubs(:appsecret_proof).returns(@appsecret_proof)
|
269
263
|
strategy.stubs(:access_token).returns(@access_token)
|
270
|
-
params = {:
|
264
|
+
params = {params: @options}
|
271
265
|
@access_token.expects(:get).with('me', params).returns(stub_everything('OAuth2::Response'))
|
272
266
|
strategy.raw_info
|
273
267
|
end
|
274
268
|
|
275
|
-
test 'performs a GET to https://graph.facebook.com/me with locale' do
|
276
|
-
@options.merge!({ :
|
269
|
+
test 'performs a GET to https://graph.facebook.com/v4.0/me with locale' do
|
270
|
+
@options.merge!({ locale: 'cs_CZ' })
|
277
271
|
strategy.stubs(:access_token).returns(@access_token)
|
278
272
|
strategy.stubs(:appsecret_proof).returns(@appsecret_proof)
|
279
|
-
params = {:
|
273
|
+
params = {params: @options}
|
280
274
|
@access_token.expects(:get).with('me', params).returns(stub_everything('OAuth2::Response'))
|
281
275
|
strategy.raw_info
|
282
276
|
end
|
283
277
|
|
284
|
-
test 'performs a GET to https://graph.facebook.com/me with info_fields' do
|
285
|
-
@options.merge!({:
|
278
|
+
test 'performs a GET to https://graph.facebook.com/v4.0/me with info_fields' do
|
279
|
+
@options.merge!({info_fields: 'about'})
|
286
280
|
strategy.stubs(:access_token).returns(@access_token)
|
287
281
|
strategy.stubs(:appsecret_proof).returns(@appsecret_proof)
|
288
|
-
params = {:
|
282
|
+
params = {params: {appsecret_proof: @appsecret_proof, fields: 'about'}}
|
289
283
|
@access_token.expects(:get).with('me', params).returns(stub_everything('OAuth2::Response'))
|
290
284
|
strategy.raw_info
|
291
285
|
end
|
292
286
|
|
293
|
-
test 'performs a GET to https://graph.facebook.com/me with default info_fields' do
|
287
|
+
test 'performs a GET to https://graph.facebook.com/v4.0/me with default info_fields' do
|
294
288
|
strategy.stubs(:access_token).returns(@access_token)
|
295
289
|
strategy.stubs(:appsecret_proof).returns(@appsecret_proof)
|
296
|
-
params = {:
|
290
|
+
params = {params: {appsecret_proof: @appsecret_proof, fields: 'name,email'}}
|
297
291
|
@access_token.expects(:get).with('me', params).returns(stub_everything('OAuth2::Response'))
|
298
292
|
strategy.raw_info
|
299
293
|
end
|
@@ -306,7 +300,7 @@ class RawInfoTest < StrategyTestCase
|
|
306
300
|
raw_response.stubs(:status).returns(200)
|
307
301
|
raw_response.stubs(:headers).returns({'Content-Type' => 'application/json' })
|
308
302
|
oauth2_response = OAuth2::Response.new(raw_response)
|
309
|
-
params = {:
|
303
|
+
params = {params: @options}
|
310
304
|
@access_token.stubs(:get).with('me', params).returns(oauth2_response)
|
311
305
|
assert_kind_of Hash, strategy.raw_info
|
312
306
|
assert_equal 'thar', strategy.raw_info['ohai']
|
@@ -315,16 +309,16 @@ class RawInfoTest < StrategyTestCase
|
|
315
309
|
test 'returns an empty hash when the response is false' do
|
316
310
|
strategy.stubs(:access_token).returns(@access_token)
|
317
311
|
strategy.stubs(:appsecret_proof).returns(@appsecret_proof)
|
318
|
-
oauth2_response = stub('OAuth2::Response', :
|
319
|
-
params = {:
|
312
|
+
oauth2_response = stub('OAuth2::Response', parsed: false)
|
313
|
+
params = {params: @options}
|
320
314
|
@access_token.stubs(:get).with('me', params).returns(oauth2_response)
|
321
315
|
assert_kind_of Hash, strategy.raw_info
|
322
316
|
assert_equal({}, strategy.raw_info)
|
323
317
|
end
|
324
318
|
|
325
319
|
test 'should not include raw_info in extras hash when skip_info is specified' do
|
326
|
-
@options = { :
|
327
|
-
strategy.stubs(:raw_info).returns({:
|
320
|
+
@options = { skip_info: true }
|
321
|
+
strategy.stubs(:raw_info).returns({foo: 'bar' })
|
328
322
|
refute_has_key 'raw_info', strategy.extra
|
329
323
|
end
|
330
324
|
end
|
@@ -458,7 +452,7 @@ module SignedRequestTests
|
|
458
452
|
end
|
459
453
|
|
460
454
|
test 'empty param' do
|
461
|
-
|
455
|
+
assert_nil strategy.send(:signed_request_from_cookie)
|
462
456
|
end
|
463
457
|
end
|
464
458
|
|
@@ -13,7 +13,7 @@ module OAuth2StrategyTests
|
|
13
13
|
extend BlockTestHelper
|
14
14
|
|
15
15
|
test 'should be initialized with symbolized client_options' do
|
16
|
-
@options = { :
|
16
|
+
@options = { client_options: { 'authorize_url' => 'https://example.com' } }
|
17
17
|
assert_equal 'https://example.com', strategy.client.options[:authorize_url]
|
18
18
|
end
|
19
19
|
end
|
@@ -22,19 +22,19 @@ module OAuth2StrategyTests
|
|
22
22
|
extend BlockTestHelper
|
23
23
|
|
24
24
|
test 'should include any authorize params passed in the :authorize_params option' do
|
25
|
-
@options = { :
|
25
|
+
@options = { authorize_params: { foo: 'bar', baz: 'zip' } }
|
26
26
|
assert_equal 'bar', strategy.authorize_params['foo']
|
27
27
|
assert_equal 'zip', strategy.authorize_params['baz']
|
28
28
|
end
|
29
29
|
|
30
30
|
test 'should include top-level options that are marked as :authorize_options' do
|
31
|
-
@options = { :
|
31
|
+
@options = { authorize_options: [:scope, :foo], scope: 'bar', foo: 'baz' }
|
32
32
|
assert_equal 'bar', strategy.authorize_params['scope']
|
33
33
|
assert_equal 'baz', strategy.authorize_params['foo']
|
34
34
|
end
|
35
35
|
|
36
36
|
test 'should exclude top-level options that are not passed' do
|
37
|
-
@options = { :
|
37
|
+
@options = { authorize_options: [:bar] }
|
38
38
|
refute_has_key :bar, strategy.authorize_params
|
39
39
|
refute_has_key 'bar', strategy.authorize_params
|
40
40
|
end
|
@@ -51,7 +51,7 @@ module OAuth2StrategyTests
|
|
51
51
|
end
|
52
52
|
|
53
53
|
test 'should not store state in the session when present in authorize params vs. a random one' do
|
54
|
-
@options = { :
|
54
|
+
@options = { authorize_params: { state: 'bar' } }
|
55
55
|
refute_empty strategy.authorize_params['state']
|
56
56
|
refute_equal 'bar', strategy.authorize_params[:state]
|
57
57
|
refute_empty strategy.session['omniauth.state']
|
@@ -71,13 +71,13 @@ module OAuth2StrategyTests
|
|
71
71
|
extend BlockTestHelper
|
72
72
|
|
73
73
|
test 'should include any authorize params passed in the :token_params option' do
|
74
|
-
@options = { :
|
74
|
+
@options = { token_params: { foo: 'bar', baz: 'zip' } }
|
75
75
|
assert_equal 'bar', strategy.token_params['foo']
|
76
76
|
assert_equal 'zip', strategy.token_params['baz']
|
77
77
|
end
|
78
78
|
|
79
79
|
test 'should include top-level options that are marked as :token_options' do
|
80
|
-
@options = { :
|
80
|
+
@options = { token_options: [:scope, :foo], scope: 'bar', foo: 'baz' }
|
81
81
|
assert_equal 'bar', strategy.token_params['scope']
|
82
82
|
assert_equal 'baz', strategy.token_params['foo']
|
83
83
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: omniauth-facebook
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 7.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mark Dodwell
|
@@ -9,62 +9,62 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-08-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: omniauth-oauth2
|
16
16
|
requirement: !ruby/object:Gem::Requirement
|
17
17
|
requirements:
|
18
|
-
- - ~>
|
18
|
+
- - "~>"
|
19
19
|
- !ruby/object:Gem::Version
|
20
20
|
version: '1.2'
|
21
21
|
type: :runtime
|
22
22
|
prerelease: false
|
23
23
|
version_requirements: !ruby/object:Gem::Requirement
|
24
24
|
requirements:
|
25
|
-
- - ~>
|
25
|
+
- - "~>"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '1.2'
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
29
|
name: minitest
|
30
30
|
requirement: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '0'
|
35
35
|
type: :development
|
36
36
|
prerelease: false
|
37
37
|
version_requirements: !ruby/object:Gem::Requirement
|
38
38
|
requirements:
|
39
|
-
- -
|
39
|
+
- - ">="
|
40
40
|
- !ruby/object:Gem::Version
|
41
41
|
version: '0'
|
42
42
|
- !ruby/object:Gem::Dependency
|
43
43
|
name: mocha
|
44
44
|
requirement: !ruby/object:Gem::Requirement
|
45
45
|
requirements:
|
46
|
-
- -
|
46
|
+
- - ">="
|
47
47
|
- !ruby/object:Gem::Version
|
48
48
|
version: '0'
|
49
49
|
type: :development
|
50
50
|
prerelease: false
|
51
51
|
version_requirements: !ruby/object:Gem::Requirement
|
52
52
|
requirements:
|
53
|
-
- -
|
53
|
+
- - ">="
|
54
54
|
- !ruby/object:Gem::Version
|
55
55
|
version: '0'
|
56
56
|
- !ruby/object:Gem::Dependency
|
57
57
|
name: rake
|
58
58
|
requirement: !ruby/object:Gem::Requirement
|
59
59
|
requirements:
|
60
|
-
- -
|
60
|
+
- - ">="
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '0'
|
63
63
|
type: :development
|
64
64
|
prerelease: false
|
65
65
|
version_requirements: !ruby/object:Gem::Requirement
|
66
66
|
requirements:
|
67
|
-
- -
|
67
|
+
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
69
|
version: '0'
|
70
70
|
description:
|
@@ -75,8 +75,9 @@ executables: []
|
|
75
75
|
extensions: []
|
76
76
|
extra_rdoc_files: []
|
77
77
|
files:
|
78
|
-
- .
|
79
|
-
- .
|
78
|
+
- ".github/workflows/stale.yml"
|
79
|
+
- ".gitignore"
|
80
|
+
- ".travis.yml"
|
80
81
|
- CHANGELOG.md
|
81
82
|
- Gemfile
|
82
83
|
- README.md
|
@@ -107,17 +108,16 @@ require_paths:
|
|
107
108
|
- lib
|
108
109
|
required_ruby_version: !ruby/object:Gem::Requirement
|
109
110
|
requirements:
|
110
|
-
- -
|
111
|
+
- - ">="
|
111
112
|
- !ruby/object:Gem::Version
|
112
113
|
version: '0'
|
113
114
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
114
115
|
requirements:
|
115
|
-
- -
|
116
|
+
- - ">="
|
116
117
|
- !ruby/object:Gem::Version
|
117
118
|
version: '0'
|
118
119
|
requirements: []
|
119
|
-
|
120
|
-
rubygems_version: 2.0.14
|
120
|
+
rubygems_version: 3.2.0.pre1
|
121
121
|
signing_key:
|
122
122
|
specification_version: 4
|
123
123
|
summary: Facebook OAuth2 Strategy for OmniAuth
|