I have implemented dual authentication in the following way.
session_controller.rb
def create
if (params[:log]=="local")
self.resource = warden.authenticate!(:database_authenticatable)
sign_in(resource_name, resource)
yield resource if block_given?
respond_with resource, location: after_sign_in_path_for(resource)
else
self.resource = warden.authenticate!(:ldap_authenticatable)
sign_in(resource_name, resource)
yield resource if block_given?
respond_with resource, location: after_sign_in_path_for(resource)
end
end
user.rb
class User < ActiveRecord::Base
devise :ldap_authenticatable,
:database_authenticatable,:registerable,
:recoverable, :rememberable, :trackable, :validatable
**and view devise/sessions/new.html.erb**
<%= form_for(:user, :url => session_path(:user)) do |f| %>
<div class="form-inputs">
<%= f.text_field :username ,:placeholder => "Login id" %><br> <br>
<%= f.password_field :password,:placeholder => "Password" %>
<label for="check_box_type">Login Server </label><%= select_tag :log, options_for_select([ [" Domain Server","domain"],["Local Server", "local"]])%>
<%= f.submit 'Sign in' %>
Here according to the user input (login server :local/domain] it will login.