omniauth-generator 0.1.0 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fedc3d26b48573ab55051ab223a168898f9275106024defd0b848ce0c0e87a62
4
- data.tar.gz: 21b52f3c5a812a77e3ca02ededa20288d4b4e6ff37f78413fb9d7e27c6d98ade
3
+ metadata.gz: 4d351d58c977e211e3f060d4a3eaf93e54969ee8a798b23bbcc62e4dd91112a5
4
+ data.tar.gz: afd00eeb75dc3eeb9d35e2fbf6ef86b661a7fefdb89566146ffc09aff42b7cc4
5
5
  SHA512:
6
- metadata.gz: 70b1937a1444eaac817e631c9e25bd4c879eed85e2e93fc923cfa06b52396309541a3ac1c9bff96aca659a14e5eba20731f60fed40a629c71f57ea3aded17e16
7
- data.tar.gz: 412c340cc7d8a4c8d3c6ed048c73e7459c22a24f40c0bc7636cfb51fcce5d24ff69982da7ef81f19288c5f433859f6708682ef1b111d231d2cebc3ee8c4422b7
6
+ metadata.gz: c42ad9765b5abfb5fbae9a0b9b60fd05a62a3607244fbbfd5384827f8637c8d4e8d5135c9618fc7db31199ed6cc39a51ed7208e4a9a2a44b07ccdb5ed278c4f3
7
+ data.tar.gz: d4007e2d5ba711b19e3288549828465cc4e279335f191b12da9e6b61ada85076ff8871028db8fe2d136b22f5de4a76ad563bb0ab1baad0c1ed7daee9e78a1ad2
data/README.md CHANGED
@@ -12,7 +12,7 @@ This project contains helpers for the following social login buttons:
12
12
  - [Microsoft](https://learn.microsoft.com/en-us/entra/identity-platform/howto-add-branding-in-apps)
13
13
  - [Apple](https://developer.apple.com/design/human-interface-guidelines/sign-in-with-apple)
14
14
  - Facebook
15
- - LinkedIn
15
+ - LinkedIn - [omniauth-linkedin-openid](https://github.com/jclusso/omniauth-linkedin-openid)
16
16
  - [GitHub](https://github.com/logos) (they don't have a guideline for how to style their login button)
17
17
 
18
18
  The buttons have basic styling and should look pretty when `<buttons>` are already styled. This is how they look out of the box with [PicoCSS](https://picocss.com/):
@@ -41,7 +41,7 @@ bundle add omniauth-generator --group development
41
41
  # Install at least one omniauth gem/strategy, e.g. of the following
42
42
  bundle add omniauth-google-oauth2
43
43
  bundle add omniauth-facebook
44
- bundle add omniauth-linkedin
44
+ bundle add omniauth-linkedin-openid
45
45
  bundle add omniauth-github
46
46
  bundle add omniauth-azure-activedirectory-v2
47
47
  bundle add omniauth-apple
@@ -69,7 +69,29 @@ rails server
69
69
  - All styling and CSS is inlined in the `Helper` so this Gem should work with any js and css bundler.
70
70
  - Put all the social buttons into a separate renderer and separate them from `app/views/devise/shared/_links.html.erb`
71
71
 
72
+ ## Changelog
73
+
74
+ ### [Unreleased]
75
+
76
+ ### [0.1.2] - 2024-12-20
77
+
78
+ - Recommend to use `omniauth-linkedin-openid` for LinkedIn
79
+ - Add index to `users` table for [`uid`, `provider`]
80
+ - Fix initiliazation of provider/uid for existing users
81
+ - Add template code for providers which don't provide emails for some users
82
+ - Add a HR between Login and Social buttons
83
+ - Revert override of `def failure` to flash+redirect
84
+
85
+ ### [0.1.1] - 2024-10-18
86
+
87
+ - Fixed a bug where the app would not start in an environment where no credentials are available.
88
+
89
+ ### [0.1.0] - 2024-10-17
90
+
91
+ - Initial release
92
+
72
93
  ## Limitations
73
94
 
74
95
  - The generator is able to support multiple `omniauth-xxx` gems at the same time, but users can not log into the same account from multiple providers when those providers provide the same email back. Compare this answer on SO: https://stackoverflow.com/a/22126562/278842
75
96
  - The generator is using secrets from the Rails credentials file. If you prefer to use ENV you need to adjust the code in `config/initializers/devise.rb` accordingly.
97
+ - I did remove a line from the Omniauth callback controller for `google-oauth2` which didn't make sense to me. It might break something. https://github.com/zquestz/omniauth-google-oauth2/issues/466
@@ -9,15 +9,15 @@ module Devise
9
9
 
10
10
  def dependencies
11
11
 
12
- omniauth_strategies = {
12
+ omniauth_gems = {
13
13
  google: :GoogleOauth2,
14
14
  facebook: :Facebook,
15
- linkedin: :LinkedIn,
15
+ linkedin: :LinkedinOpenid,
16
16
  github: :GitHub,
17
17
  microsoft: :AzureActivedirectoryV2,
18
18
  apple: :Apple
19
19
  }
20
- if !omniauth_strategies.any? { |_, strategy_class| Gem.loaded_specs.has_key?("omniauth-#{strategy_class.to_s.underscore.gsub('_', '-')}") }
20
+ if !omniauth_gems.any? { |_, strategy_class| Gem.loaded_specs.has_key?("omniauth-#{strategy_class.to_s.underscore.gsub('_', '-')}") }
21
21
  say_error("Omniauth-generator: Need at least one OmniAuth strategy gem to be installed. Obvious candidates not found.")
22
22
  ask("Would you like to continue? (y/n)") do |answer|
23
23
  Kernel.exit(1) unless answer.downcase == 'y'
@@ -29,6 +29,7 @@ module Devise
29
29
 
30
30
  def database_update
31
31
  generate :migration, "AddOmniauthToUsers provider:string uid:string"
32
+ insert_into_file Dir.glob("db/migrate/*_add_omniauth_to_users.rb").first, before: ' end', ' add_index :users, [ :uid, :provider ]\n'
32
33
  end
33
34
 
34
35
  def update_application
@@ -1,156 +1,162 @@
1
- <%- resource_class.omniauth_providers.each do |provider| -%>
2
- <%- case provider -%>
3
- <%- when :google -%>
4
- <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
5
- display: flex;
6
- align-items: center;
7
- justify-content: center;
8
- background-color: white;
9
- border: 1px solid #747775;
10
- border-radius: 4px;
11
- font-family: 'Roboto', Arial, sans-serif;
12
- color: #1f1f1f;
13
- font-weight: 500;
14
- box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
15
- outline: none;" do %>
16
- <svg xmlns="http://www.w3.org/2000/svg" style="width:20px;height:20px;margin-right:12px" viewBox="0 0 48 48">
17
- <path fill="#EA4335" d="M24 10c4 0 7 1 9 3l7-7c-4-4-10-6-16-6C15 0 7 5 3 13l8 6c1-5 7-9 13-9z"/>
18
- <path fill="#4285F4" d="M47 25v-5H24v9h13c-1 3-2 6-5 7l8 6c4-4 7-10 7-17z"/>
19
- <path fill="#FBBC05" d="m11 29-1-5 1-5-8-6a24 24 0 0 0 0 22l8-6z"/>
20
- <path fill="#34A853" d="M24 48c6 0 12-2 16-6l-8-6c-2 2-5 2-8 2-6 0-12-4-13-9l-8 6c4 8 12 13 21 13z"/>
21
- <path fill="none" d="M0 0h48v48H0z"/>
22
- </svg>
23
- <span>
24
- Sign <%= controller_name == 'registrations' ? 'up' : 'in' %> with <%= OmniAuth::Utils.camelize(provider) %>
25
- </span>
26
- <% end %>
27
-
28
- <%- when :microsoft -%>
29
- <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
1
+ <%- if devise_mapping.omniauthable? && resource_class.omniauth_providers.size > 0 %>
2
+ <div style="display: flex; align-items: center; justify-content: center; margin: 0.75rem 0;">
3
+ <hr style="flex: 1;"><small style="padding: 0 1em; margin-bottom: 0.2em;">or</small><hr style="flex: 1;">
4
+ </div>
5
+
6
+ <%- resource_class.omniauth_providers.each do |provider| -%>
7
+ <%- case provider -%>
8
+ <%- when :google -%>
9
+ <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
30
10
  display: flex;
31
11
  align-items: center;
32
12
  justify-content: center;
33
- background-color: #FFFFFF;
34
- border: 1px solid #8C8C8C;
13
+ background-color: white;
14
+ border: 1px solid #747775;
35
15
  border-radius: 4px;
36
- font-family: 'Segoe UI', Arial, sans-serif;
37
- color: #5E5E5E;
38
- font-weight: 600;
16
+ font-family: 'Roboto', Arial, sans-serif;
17
+ color: #1f1f1f;
18
+ font-weight: 500;
39
19
  box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
40
- outline: none;
41
- " do %>
42
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 21" style="width: 20px; height: 20px; margin-right: 12px;">
43
- <rect x="1" y="1" width="9" height="9" fill="#f25022"/>
44
- <rect x="1" y="11" width="9" height="9" fill="#00a4ef"/>
45
- <rect x="11" y="1" width="9" height="9" fill="#7fba00"/>
46
- <rect x="11" y="11" width="9" height="9" fill="#ffb900"/>
20
+ outline: none;" do %>
21
+ <svg xmlns="http://www.w3.org/2000/svg" style="width:20px;height:20px;margin-right:12px" viewBox="0 0 48 48">
22
+ <path fill="#EA4335" d="M24 10c4 0 7 1 9 3l7-7c-4-4-10-6-16-6C15 0 7 5 3 13l8 6c1-5 7-9 13-9z"/>
23
+ <path fill="#4285F4" d="M47 25v-5H24v9h13c-1 3-2 6-5 7l8 6c4-4 7-10 7-17z"/>
24
+ <path fill="#FBBC05" d="m11 29-1-5 1-5-8-6a24 24 0 0 0 0 22l8-6z"/>
25
+ <path fill="#34A853" d="M24 48c6 0 12-2 16-6l-8-6c-2 2-5 2-8 2-6 0-12-4-13-9l-8 6c4 8 12 13 21 13z"/>
26
+ <path fill="none" d="M0 0h48v48H0z"/>
47
27
  </svg>
48
- <span style="margin-bottom: 0.1em;">
28
+ <span>
49
29
  Sign <%= controller_name == 'registrations' ? 'up' : 'in' %> with <%= OmniAuth::Utils.camelize(provider) %>
50
30
  </span>
51
31
  <% end %>
32
+
33
+ <%- when :microsoft -%>
34
+ <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
35
+ display: flex;
36
+ align-items: center;
37
+ justify-content: center;
38
+ background-color: #FFFFFF;
39
+ border: 1px solid #8C8C8C;
40
+ border-radius: 4px;
41
+ font-family: 'Segoe UI', Arial, sans-serif;
42
+ color: #5E5E5E;
43
+ font-weight: 600;
44
+ box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
45
+ outline: none;
46
+ " do %>
47
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 21 21" style="width: 20px; height: 20px; margin-right: 12px;">
48
+ <rect x="1" y="1" width="9" height="9" fill="#f25022"/>
49
+ <rect x="1" y="11" width="9" height="9" fill="#00a4ef"/>
50
+ <rect x="11" y="1" width="9" height="9" fill="#7fba00"/>
51
+ <rect x="11" y="11" width="9" height="9" fill="#ffb900"/>
52
+ </svg>
53
+ <span style="margin-bottom: 0.1em;">
54
+ Sign <%= controller_name == 'registrations' ? 'up' : 'in' %> with <%= OmniAuth::Utils.camelize(provider) %>
55
+ </span>
56
+ <% end %>
52
57
 
53
- <%- when :facebook -%>
54
- <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
55
- display: flex;
56
- align-items: center;
57
- justify-content: center;
58
- background-color: #1877F2;
59
- border: none;
60
- border-radius: 4px;
61
- color: #FFFFFF;
62
- font-weight: 600;
63
- box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
64
- outline: none;
65
- " do %>
66
- <svg xmlns="http://www.w3.org/2000/svg" style="width:30px;height:30px;margin-right:12px" viewBox="0 0 666.7 666.7">
67
- <defs>
68
- <clipPath id="a" clipPathUnits="userSpaceOnUse">
69
- <path d="M0 700h700V0H0Z"/>
70
- </clipPath>
71
- </defs>
72
- <g clip-path="url(#a)" transform="matrix(1.3333333 0 0 -1.3333333 -133 800)">
73
- <path d="M0 0a250 250 0 1 1-310-243v167h-52V0h52v33c0 85 38 124 122 124 15 0 43-3 54-6V82l-29 1c-41 0-57-16-57-56V0h82l-14-76h-68v-172A250 250 0 0 1 0 0" style="fill:#fff;fill-opacity:1;fill-rule:nonzero;stroke:none" transform="translate(600 350)"/>
74
- <path d="m0 0 14 76h-82v27c0 41 16 56 57 56l29-1v70c-11 3-38 6-54 6-84 0-122-40-122-125V76h-52V0h52v-166a251 251 0 0 1 90-6V0Z" style="fill:#1877f2;fill-opacity:1;fill-rule:nonzero;stroke:none" transform="translate(448 274)"/>
75
- </g>
76
- </svg>
77
- <span>
78
- <%= controller_name == 'registrations' ? 'Continue' : 'Log in' %> with <%= OmniAuth::Utils.camelize(provider) %>
79
- </span>
80
- <% end %>
58
+ <%- when :facebook -%>
59
+ <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
60
+ display: flex;
61
+ align-items: center;
62
+ justify-content: center;
63
+ background-color: #1877F2;
64
+ border: none;
65
+ border-radius: 4px;
66
+ color: #FFFFFF;
67
+ font-weight: 600;
68
+ box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
69
+ outline: none;
70
+ " do %>
71
+ <svg xmlns="http://www.w3.org/2000/svg" style="width:30px;height:30px;margin-right:12px" viewBox="0 0 666.7 666.7">
72
+ <defs>
73
+ <clipPath id="a" clipPathUnits="userSpaceOnUse">
74
+ <path d="M0 700h700V0H0Z"/>
75
+ </clipPath>
76
+ </defs>
77
+ <g clip-path="url(#a)" transform="matrix(1.3333333 0 0 -1.3333333 -133 800)">
78
+ <path d="M0 0a250 250 0 1 1-310-243v167h-52V0h52v33c0 85 38 124 122 124 15 0 43-3 54-6V82l-29 1c-41 0-57-16-57-56V0h82l-14-76h-68v-172A250 250 0 0 1 0 0" style="fill:#fff;fill-opacity:1;fill-rule:nonzero;stroke:none" transform="translate(600 350)"/>
79
+ <path d="m0 0 14 76h-82v27c0 41 16 56 57 56l29-1v70c-11 3-38 6-54 6-84 0-122-40-122-125V76h-52V0h52v-166a251 251 0 0 1 90-6V0Z" style="fill:#1877f2;fill-opacity:1;fill-rule:nonzero;stroke:none" transform="translate(448 274)"/>
80
+ </g>
81
+ </svg>
82
+ <span>
83
+ <%= controller_name == 'registrations' ? 'Continue' : 'Log in' %> with <%= OmniAuth::Utils.camelize(provider) %>
84
+ </span>
85
+ <% end %>
81
86
 
82
- <%- when :github -%>
83
- <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
84
- display: flex;
85
- align-items: center;
86
- justify-content: center;
87
- background-color: #000000;
88
- border: none;
89
- border-radius: 4px;
90
- color: #FFFFFF;
91
- font-weight: 600;
92
- box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
93
- outline: none;
94
- " do %>
95
- <svg xmlns="http://www.w3.org/2000/svg" style="width:30px;height:30px;margin-right:12px" viewBox="0 0 96 98">
96
- <path fill="#fff" fill-rule="evenodd" d="M48.9 0a49.2 49.2 0 0 0-15.4 96c2.3.4 3.2-1.2 3.2-2.5v-9c-13.6 2.9-16.5-6-16.5-6-2.2-5.7-5.4-7.1-5.4-7.1-4.4-3 .3-3 .3-3 5 .3 7.5 5 7.5 5 4.4 7.5 11.5 5.4 14.3 4 .4-3 1.7-5.3 3-6.5-10.8-1.1-22.2-5.4-22.2-24.3 0-5.4 2-9.8 5-13.2-.5-1.2-2.2-6.3.5-13 0 0 4.1-1.3 13.4 5A47 47 0 0 1 49 23.8c4 0 8.3.6 12.2 1.6 9.3-6.3 13.4-5 13.4-5 2.7 6.7 1 11.8.5 13 3.1 3.4 5 7.8 5 13.2 0 19-11.4 23-22.3 24.3 1.7 1.5 3.3 4.5 3.3 9.1v13.5c0 1.3.8 2.9 3.2 2.4a49.2 49.2 0 0 0 33.4-46.7A49 49 0 0 0 49 0z" clip-rule="evenodd"/>
97
- </svg>
98
- <span>
99
- Sign <%= controller_name == 'registrations' ? 'up' : 'in' %> with GitHub
100
- </span>
101
- <% end %>
87
+ <%- when :github -%>
88
+ <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
89
+ display: flex;
90
+ align-items: center;
91
+ justify-content: center;
92
+ background-color: #000000;
93
+ border: none;
94
+ border-radius: 4px;
95
+ color: #FFFFFF;
96
+ font-weight: 600;
97
+ box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
98
+ outline: none;
99
+ " do %>
100
+ <svg xmlns="http://www.w3.org/2000/svg" style="width:30px;height:30px;margin-right:12px" viewBox="0 0 96 98">
101
+ <path fill="#fff" fill-rule="evenodd" d="M48.9 0a49.2 49.2 0 0 0-15.4 96c2.3.4 3.2-1.2 3.2-2.5v-9c-13.6 2.9-16.5-6-16.5-6-2.2-5.7-5.4-7.1-5.4-7.1-4.4-3 .3-3 .3-3 5 .3 7.5 5 7.5 5 4.4 7.5 11.5 5.4 14.3 4 .4-3 1.7-5.3 3-6.5-10.8-1.1-22.2-5.4-22.2-24.3 0-5.4 2-9.8 5-13.2-.5-1.2-2.2-6.3.5-13 0 0 4.1-1.3 13.4 5A47 47 0 0 1 49 23.8c4 0 8.3.6 12.2 1.6 9.3-6.3 13.4-5 13.4-5 2.7 6.7 1 11.8.5 13 3.1 3.4 5 7.8 5 13.2 0 19-11.4 23-22.3 24.3 1.7 1.5 3.3 4.5 3.3 9.1v13.5c0 1.3.8 2.9 3.2 2.4a49.2 49.2 0 0 0 33.4-46.7A49 49 0 0 0 49 0z" clip-rule="evenodd"/>
102
+ </svg>
103
+ <span>
104
+ Sign <%= controller_name == 'registrations' ? 'up' : 'in' %> with GitHub
105
+ </span>
106
+ <% end %>
102
107
 
103
- <%- when :linkedin -%>
104
- <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
105
- display: flex;
106
- align-items: center;
107
- justify-content: center;
108
- background-color: #0077B5;
109
- border: none;
110
- border-radius: 4px;
111
- color: #FFFFFF;
112
- font-weight: 600;
113
- box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
114
- outline: none;
115
- " do %>
116
- <svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px;margin-right:12px" viewBox="0 0 72 72">
117
- <g fill="none" fill-rule="evenodd">
118
- <path fill="#FFF" d="M8 72h56c4 0 8-4 8-8V8c0-4-4-8-8-8H8C4 0 0 4 0 8v56c0 4 4 8 8 8Z"/>
119
- <path fill="#007EBB" d="M62 62H51V44c0-5-2-8-6-8s-6 3-6 8v18H29V27h10v5s3-6 10-6c8 0 13 5 13 14v22ZM16 23c-3 0-6-3-6-7 0-3 3-6 6-6 4 0 7 3 7 6 0 4-3 7-7 7Zm-5 39h11V27H11v35Z"/>
120
- </g>
121
- </svg>
122
- <span>
123
- Sign <%= controller_name == 'registrations' ? 'up' : 'in' %> with <%= OmniAuth::Utils.camelize(provider) %>
124
- </span>
125
- <% end %>
108
+ <%- when :linkedin -%>
109
+ <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
110
+ display: flex;
111
+ align-items: center;
112
+ justify-content: center;
113
+ background-color: #0077B5;
114
+ border: none;
115
+ border-radius: 4px;
116
+ color: #FFFFFF;
117
+ font-weight: 600;
118
+ box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
119
+ outline: none;
120
+ " do %>
121
+ <svg xmlns="http://www.w3.org/2000/svg" style="width:24px;height:24px;margin-right:12px" viewBox="0 0 72 72">
122
+ <g fill="none" fill-rule="evenodd">
123
+ <path fill="#FFF" d="M8 72h56c4 0 8-4 8-8V8c0-4-4-8-8-8H8C4 0 0 4 0 8v56c0 4 4 8 8 8Z"/>
124
+ <path fill="#007EBB" d="M62 62H51V44c0-5-2-8-6-8s-6 3-6 8v18H29V27h10v5s3-6 10-6c8 0 13 5 13 14v22ZM16 23c-3 0-6-3-6-7 0-3 3-6 6-6 4 0 7 3 7 6 0 4-3 7-7 7Zm-5 39h11V27H11v35Z"/>
125
+ </g>
126
+ </svg>
127
+ <span>
128
+ Sign <%= controller_name == 'registrations' ? 'up' : 'in' %> with <%= OmniAuth::Utils.camelize(provider) %>
129
+ </span>
130
+ <% end %>
126
131
 
127
- <%- when :apple -%>
132
+ <%- when :apple -%>
128
133
 
129
- <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
130
- display: flex;
131
- align-items: center;
132
- justify-content: center;
133
- background-color: #000000;
134
- border: none;
135
- border-radius: 4px;
136
- color: #FFFFFF;
137
- font-weight: 600;
138
- box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
139
- outline: none;" do %>
140
- <svg xmlns="http://www.w3.org/2000/svg" style="width:30px;height:30px;margin-right:5px" viewBox="13 13 30 30">
141
- <g fill="none" fill-rule="evenodd">
142
- <path fill="#000" d="M6 6h44v44H6z"/>
143
- <path fill="#FFF" fill-rule="nonzero" d="M28.2 20.4c.9 0 1.9-.6 2.5-1.4a4 4 0 0 0 1-2.6V16c-1 0-2 .6-2.8 1.4-.5.7-1 1.6-1 2.6v.4h.3Zm-3 14.6c1.2 0 1.7-.8 3.2-.8 1.4 0 1.7.8 3 .8 1.2 0 2-1.2 2.8-2.4 1-1.3 1.3-2.6 1.3-2.7 0 0-2.5-1-2.5-3.8 0-2.4 2-3.5 2-3.6a4.3 4.3 0 0 0-3.6-2c-1.4 0-2.6 1-3.3 1-.7 0-1.8-.9-3-.9-2.3 0-4.6 2-4.6 5.7 0 2.3.9 4.7 2 6.3.8 1.3 1.6 2.4 2.8 2.4Z"/>
144
- </g>
145
- </svg>
146
- <span>
147
- Sign <%= controller_name == 'registrations' ? 'up' : 'in' %> with <%= OmniAuth::Utils.camelize(provider) %>
148
- </span>
149
- <% end %>
134
+ <%= button_to omniauth_authorize_path(resource_name, provider), data: { turbo: false }, method: :post, style: "
135
+ display: flex;
136
+ align-items: center;
137
+ justify-content: center;
138
+ background-color: #000000;
139
+ border: none;
140
+ border-radius: 4px;
141
+ color: #FFFFFF;
142
+ font-weight: 600;
143
+ box-shadow: 0 1px 2px rgba(60, 64, 67, 0.30), 0 1px 3px rgba(60, 64, 67, 0.15);
144
+ outline: none;" do %>
145
+ <svg xmlns="http://www.w3.org/2000/svg" style="width:30px;height:30px;margin-right:5px" viewBox="13 13 30 30">
146
+ <g fill="none" fill-rule="evenodd">
147
+ <path fill="#000" d="M6 6h44v44H6z"/>
148
+ <path fill="#FFF" fill-rule="nonzero" d="M28.2 20.4c.9 0 1.9-.6 2.5-1.4a4 4 0 0 0 1-2.6V16c-1 0-2 .6-2.8 1.4-.5.7-1 1.6-1 2.6v.4h.3Zm-3 14.6c1.2 0 1.7-.8 3.2-.8 1.4 0 1.7.8 3 .8 1.2 0 2-1.2 2.8-2.4 1-1.3 1.3-2.6 1.3-2.7 0 0-2.5-1-2.5-3.8 0-2.4 2-3.5 2-3.6a4.3 4.3 0 0 0-3.6-2c-1.4 0-2.6 1-3.3 1-.7 0-1.8-.9-3-.9-2.3 0-4.6 2-4.6 5.7 0 2.3.9 4.7 2 6.3.8 1.3 1.6 2.4 2.8 2.4Z"/>
149
+ </g>
150
+ </svg>
151
+ <span>
152
+ Sign <%= controller_name == 'registrations' ? 'up' : 'in' %> with <%= OmniAuth::Utils.camelize(provider) %>
153
+ </span>
154
+ <% end %>
150
155
 
151
- <%- else -%>
156
+ <%- else -%>
152
157
 
153
- <%= button_to "Sign #{controller_name == 'registrations' ? "up" : "in" } with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider), data: { turbo: false } %>
158
+ <%= button_to "Sign #{controller_name == 'registrations' ? "up" : "in" } with #{OmniAuth::Utils.camelize(provider)}", omniauth_authorize_path(resource_name, provider), data: { turbo: false } %>
154
159
 
160
+ <%- end -%>
155
161
  <%- end -%>
156
162
  <%- end -%>
@@ -1,26 +1,58 @@
1
1
 
2
- if Devise.omniauth_providers&.size > 0
3
- devise :omniauthable, omniauth_providers: Devise.omniauth_providers
2
+ devise :omniauthable, omniauth_providers: Devise.omniauth_providers
4
3
 
5
- def self.from_omniauth(auth)
6
- where(provider: auth.provider, uid: auth.uid)
7
- .or(where(uid: nil, provider: nil, email: auth.info.email.downcase.strip))
8
- .first_or_create do |user|
9
- user.email = auth.info.email
10
- user.password ||= Devise.friendly_token[0, 20]
4
+ # # If you only want to allow sign-up from Omniauth providers,
5
+ # # which provide an email address, you can uncomment the following:
6
+ # validate :oauth_email_presence, on: :create
7
+ # def oauth_email_presence
8
+ # if provider.present? && email.blank?
9
+ # errors.add(:email, "wasn't provided by the login provider. Please sign up using an email address.")
10
+ # end
11
+ # end
12
+ # # Also you need to override this method from Validatable (if used)
13
+ # # so that the email presence validation is not showing as a secondary error.
14
+ # def email_required?
15
+ # !provider.present?
16
+ # end
11
17
 
12
- # if auth.info.last_name.present? && auth.info.first_name.present?
13
- # user.nickname = "#{auth.info.first_name} #{auth.info.last_name[0]}."
14
- # elsif auth.info.name.present?
15
- # user.nickname = auth.info.name
16
- # end
18
+ def self.from_omniauth(auth)
19
+ where(provider: auth.provider, uid: auth.uid)
20
+ .or(where(uid: nil, provider: nil, email: auth.info.email.downcase.strip))
21
+ .first_or_create do |user|
17
22
 
18
- # user.name = auth.info.name # assuming the user model has a name
19
- # user.image = auth.info.image # assuming the user model has an image
23
+ user.provider ||= auth.provider
24
+ user.uid ||= auth.uid
25
+ user.email = auth.info.email
26
+ user.password ||= Devise.friendly_token[0, 20]
27
+
28
+ # # Depending on the provider various infos might be available. Make sure your model has the necessary fields
29
+ #
30
+ # if auth.info.last_name.present? && auth.info.first_name.present?
31
+ # user.nickname = "#{auth.info.first_name} #{auth.info.last_name[0]}."
32
+ # elsif auth.info.name.present?
33
+ # user.nickname = auth.info.name
34
+ # end
35
+ # user.first_name = auth.info.first_name
36
+ # user.last_name = auth.info.last_name
37
+ # user.name = auth.info.name
38
+ # user.image_url = auth.info.image
20
39
 
21
- # If you are using confirmable and the provider(s) you use validate emails,
22
- # uncomment the line below to skip the confirmation emails.
23
- # user.skip_confirmation!
24
- end
25
- end
26
- end
40
+ # If you are using confirmable and the provider(s) you use validate emails,
41
+ # you can call `user.skip_confirmation!` to skip the confirmation emails.
42
+ #
43
+ # For example for LinkedIn OpenID Connect:
44
+ #
45
+ # if auth.provider == 'linkedin'
46
+ # if user.class.devise_modules.include?(:confirmable)
47
+ # if user.email.present? && auth.extra&.raw_info&.email_verified
48
+ # user.skip_confirmation!
49
+ # end
50
+ # else
51
+ # if user.email.present? && !auth.extra&.raw_info&.email_verified
52
+ # # We can't rely on this email really
53
+ # user.email = nil
54
+ # end
55
+ # end
56
+ # end
57
+ end
58
+ end
@@ -33,8 +33,10 @@ class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
33
33
  error.to_s.humanize if error
34
34
  end
35
35
 
36
+ # Might want to override default behaviour: set flash and redirect to
37
+ # after_omniauth_failure_path_for(resource_name)
36
38
  def failure
37
39
  # Might want to log this/instrument/notify
38
- redirect_to root_path
40
+ super
39
41
  end
40
42
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Omniauth
4
4
  module Generator
5
- VERSION = "0.1.0"
5
+ VERSION = "0.1.2"
6
6
  end
7
7
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: omniauth-generator
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.2
5
5
  platform: ruby
6
+ original_platform: ''
6
7
  authors:
7
8
  - Christopher Oezbek
8
- autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-10-17 00:00:00.000000000 Z
11
+ date: 2024-12-20 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Rails generator to create an Omniauth installation for Devise including
14
14
  social login buttons.
@@ -18,7 +18,6 @@ executables: []
18
18
  extensions: []
19
19
  extra_rdoc_files: []
20
20
  files:
21
- - CHANGELOG.md
22
21
  - README.md
23
22
  - Rakefile
24
23
  - lib/omniauth/generator.rb
@@ -36,7 +35,6 @@ metadata:
36
35
  homepage_uri: https://github.com/coezbek/omniauth-generator
37
36
  source_code_uri: https://github.com/coezbek/omniauth-generator
38
37
  changelog_uri: https://github.com/coezbek/omniauth-generator/README.md#Changelog
39
- post_install_message:
40
38
  rdoc_options: []
41
39
  require_paths:
42
40
  - lib
@@ -51,8 +49,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
51
49
  - !ruby/object:Gem::Version
52
50
  version: '0'
53
51
  requirements: []
54
- rubygems_version: 3.4.19
55
- signing_key:
52
+ rubygems_version: 3.6.1
56
53
  specification_version: 4
57
54
  summary: Rails generator to create an Omniauth installation for Devise
58
55
  test_files: []
data/CHANGELOG.md DELETED
@@ -1,5 +0,0 @@
1
- ## [Unreleased]
2
-
3
- ## [0.1.0] - 2024-10-17
4
-
5
- - Initial release