Step:1
Add the gems in your gem file
gem ‘devise’
gem 'omniauth'
gem 'omniauth-linkedin'
Run the “bundle install” command to install the gem.
Step:2
You need two more columns to store provider type and userid given from linkedin
rails g migration AddProviderToUsers provider:string uid:string
Runt rake db:migrate to insert the columns in users table.
Step:3
Go the user model “user.rb” and add the following line
devise : omniauthable
Step:4
First of all you need to create an app in linkedin to get “App Id” and “App Secret key”
http://developer.linkedin.com
Create an app and get the App id and secret key.
Step:5
Now you need to declare the provider name and app id and key.Go to the file config/initializers/devise.rb and the following lines
require 'omniauth-linkedin'
config.omniauth :linkedin, "APP_ID", "APP_SECRET"
Step:6
Go to your layout file and the following block
<% if user_signed_in? %>
Signed in as <%= current_user.name %>. Not you?
<%= link_to "Sign out", destroy_user_session_path,:method => :delete %>
<% else %>
<%= link_to "Sign up", new_user_registration_path %> or
<%= link_to "Sign in", new_user_session_path %>
<%= link_to "Sign in with Linkedin",user_omniauth_authorize_path(:linkedin) %>
<% end %>
When the user clicks on Sign in with Linkedin link, they will redirects to the Linked login page, after entering their credentials it will again redirect the user back to the applications Callback method .
Step:7
Before creating the call back method change your route like below
devise_for :users, :controllers => { : omniauth_callbacks => "omniauth_callbacks" }
Step:8
Create a new controller named as “omniauth_callbacks_controller.rb”.Add the following method in it.
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def linkedin
auth = env["omniauth.auth"]
@user = User.connect_to_linkedin(request.env["omniauth.auth"],current_user)
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.linkedin_uid"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
Step:9
Add the following block in your user model.
def self.connect_to_linkedin(auth, signed_in_resource=nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
if user
return user
else
registered_user = User.where(:email => auth.info.email).first
if registered_user
return registered_user
else
user = User.create(name:auth.info.first_name, provider:auth.provider, uid:auth.uid, email:auth.info.email, password:Devise.friendly_token[0,20],
)
end
end
end
Now we are done with linkedin integration with devise.
Add the gems in your gem file
gem ‘devise’
gem 'omniauth'
gem 'omniauth-linkedin'
Run the “bundle install” command to install the gem.
Step:2
You need two more columns to store provider type and userid given from linkedin
rails g migration AddProviderToUsers provider:string uid:string
Runt rake db:migrate to insert the columns in users table.
Step:3
Go the user model “user.rb” and add the following line
devise : omniauthable
Step:4
First of all you need to create an app in linkedin to get “App Id” and “App Secret key”
http://developer.linkedin.com
Create an app and get the App id and secret key.
Step:5
Now you need to declare the provider name and app id and key.Go to the file config/initializers/devise.rb and the following lines
require 'omniauth-linkedin'
config.omniauth :linkedin, "APP_ID", "APP_SECRET"
Step:6
Go to your layout file and the following block
<% if user_signed_in? %>
Signed in as <%= current_user.name %>. Not you?
<%= link_to "Sign out", destroy_user_session_path,:method => :delete %>
<% else %>
<%= link_to "Sign up", new_user_registration_path %> or
<%= link_to "Sign in", new_user_session_path %>
<%= link_to "Sign in with Linkedin",user_omniauth_authorize_path(:linkedin) %>
<% end %>
When the user clicks on Sign in with Linkedin link, they will redirects to the Linked login page, after entering their credentials it will again redirect the user back to the applications Callback method .
Step:7
Before creating the call back method change your route like below
devise_for :users, :controllers => { : omniauth_callbacks => "omniauth_callbacks" }
Step:8
Create a new controller named as “omniauth_callbacks_controller.rb”.Add the following method in it.
class OmniauthCallbacksController < Devise::OmniauthCallbacksController
def linkedin
auth = env["omniauth.auth"]
@user = User.connect_to_linkedin(request.env["omniauth.auth"],current_user)
if @user.persisted?
flash[:notice] = I18n.t "devise.omniauth_callbacks.success"
sign_in_and_redirect @user, :event => :authentication
else
session["devise.linkedin_uid"] = request.env["omniauth.auth"]
redirect_to new_user_registration_url
end
end
Step:9
Add the following block in your user model.
def self.connect_to_linkedin(auth, signed_in_resource=nil)
user = User.where(:provider => auth.provider, :uid => auth.uid).first
if user
return user
else
registered_user = User.where(:email => auth.info.email).first
if registered_user
return registered_user
else
user = User.create(name:auth.info.first_name, provider:auth.provider, uid:auth.uid, email:auth.info.email, password:Devise.friendly_token[0,20],
)
end
end
end
Now we are done with linkedin integration with devise.