omniauth-generator 0.1.0 → 0.1.2

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.
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