Read this article to understand why the title has the [AI] at the start.
Setting up OmniAuth with Devise in Rails
OmniAuth is a popular gem for enabling social login in Rails applications. It allows users to log in to your app using their existing accounts on third-party providers such as Google, Facebook, and Twitter. In this tutorial, we will show you how to set up OmniAuth in a Rails app using the Devise gem for authentication.
Step 1: Install the necessary gems
First, make sure you have the devise and omniauth gems installed in your Rails application. You can add these lines to your Gemfile:
gem 'devise' gem 'omniauth'
bundle install to install the gems.
Step 2: Run the Devise and Omniauth generators
Next, we need to run the Devise and Omniauth generators to create the necessary configuration files and models. You can do this with the following commands:
rails generate devise:install rails generate omniauth:install
These commands will create the
config/initializers/omniauth.rb files, among others.
Step 3: Add the OmniAuth providers
Now we need to add the
OmniAuth providers that we want to use in our application. For example, if we want to add Google and Facebook login, we would add these lines to the
Rails.application.config.middleware.use OmniAuth::Builder do provider :google_oauth2, GOOGLE_CLIENT_ID, GOOGLE_CLIENT_SECRET provider :facebook, FACEBOOK_APP_ID, FACEBOOK_APP_SECRET end
Make sure to replace
FACEBOOK_APP_SECRET with the appropriate keys and secrets for your application, which you can obtain from the Google and Facebook developer portals.
Step 4: Enable Omniauthable in the User model
Next, we need to add the :omniauthable module to the User model to enable social login. Assuming you are using Devise's default User model, you can do this by adding the following line to the
devise :omniauthable, omniauth_providers: [:google_oauth2, :facebook]
This will enable social login for the Google and Facebook providers that we added in the previous step.
Step 5: Create a callback controller
Finally, we need to create a callback controller to handle the response from the OmniAuth provider. This is where we will process the response and create a new user if necessary. You can create a new controller with the following command:
rails generate controller users/omniauth_callbacks
Step 6: Process the response from the OmniAuth provider
In the callback controller, add a method for each OmniAuth provider you are using. For example, to add support for Google and Facebook, you would add these methods:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def google_oauth2 # Process the response from the Google OmniAuth provider end def facebook # Process the response from the Facebook OmniAuth provider end end
In each callback method, you will need to process the response from the OmniAuth provider and create a new user if necessary. Here is an example of how you might do this for the Google OmniAuth provider:
class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController def google_oauth2 # Get the user's information from the response info = request.env['omniauth.auth'].info # Find or create the user user = User.where(email: info['email']).first_or_initialize( email: info['email'], name: info['name'], password: Devise.friendly_token[0, 20] ) # Sign in the user sign_in_and_redirect user, event: :authentication end end
This code will get the user's information from the response, find or create the user in the database, and then sign in the user. You can adapt this code for the other OmniAuth providers as needed.
And that's it! You should now have social login working in your Rails application using Devise and OmniAuth. Happy hacking :)
Top comments (0)