Add this line to your application's Gemfile:
gem 'omniauth-google-oauth2'
gem 'gull', github: 'petlove/gull'
And then execute:
$ bundle install
This application assumes you're on Rails and has Devise configured
To actually full-fledgedly use google sign in with Gull you need to follow some steps in order to configure your application properly.
For Google Sign-in to work, your user model and schema needs to have two extra attributes, called provider
and uid
.
Luckily Gull does the dull (heh) task of migrating your database for you so you don't have to worry about your inner application migrations:
Simply install Gull and inside your application's root directory run
$ bundle exec rake gull:update_user
https://developers.google.com/identity/sign-in/web/sign-in#specify_your_apps_client_id
TIP: do not forget to add the google sign-in callback Authorized redirect URIs
to your application's google_oauth callback (luckily abstracted away via Gull), something along the lines of https://<application_domain>/users/auth/google_oauth2/callback
In /app/views/devise/new.html.erb is defined the default login page. If you want, you can change the settings logo_name
and logo_style
.
By default, this is the login page:
IMPORTANT: In your project you have to import gull sessions in any sass file with @import 'gull/sessions'
.
API keys must be configured in the gem setup. You can do this anywhere in your application before you make API calls using the gem.
Gull.configure do |config|
config.google_client_id = '<HASH>.apps.googleusercontent.com'
config.google_client_secret = '<HASH>'
config.logo_name = 'my_logo.png' #default is logo.png
config.logo_style = 'margin-top: 100px;'
end
or using default values:
Gull.start!
TIP: for easily referrable configuration, you can put the configuration block above in the first lines of your config/initializers/devise.rb
file
Open up your config/initializers/devise.rb
file, in the section segmented as # ==> Omiauth
add the configuration options bellow:
config.omniauth :google_oauth2,
Gull.configuration.google_client_id,
Gull.configuration.google_client_secret,
hd: '<YOUR_DOMAIN>', prompt: 'select_account'
# hardcoded domain lock ^
or using default values:
config.omniauth *Gull.devise_omniauth_config
Open up your user model and add extend Gull
to it.
Next, where your devise configuration is located, add the following attributes so you'll end up with something like this:
class User < ActiveRecord::Base
extend Gull
devise # some attributes...
:omniauthable, omniauth_providers: %I(google_oauth2)
end
This one is pretty simple. In your main routes file, add this to your devise_for
configuration
devise_for :users, # other configuration...
, controllers: { omniauth_callbacks: 'gull/omniauth_callbacks' }
# actually important part ^
This one is even simpler, just add this to the view you want to render the button in, usually located at views/devise/sessions/new.html.erb
<%= render "gull/sign_in_button" %>
... And Voilá, you have a Google Sign-in in your Rails + Devise application, give yourself a good pat on the back, you're the champ!