Rails Cross Origin Request Blocked Solve - leebalaji1234/poc GitHub Wiki
https://gist.github.com/AdrianTeh/3561310
References: http://blog.carbonfive.com/2012/02/27/supporting-cross-domain-ajax-in-rails-using-jsonp-and-cors/ https://github.com/cyu/rack-cors http://nelm.io/blog/2011/11/cors-with-sencha-touch/ http://jessehowarth.com/2011/04/27/ajax-login-with-devise
============================================================================================================= GEMFILE
gem 'rack-cors', :require => 'rack/cors'
============================================================================================================= config/application.rb
Ensure Rack::Cors to run before Warden::Manager used by Devise
config.middleware.insert_before Warden::Manager, Rack::Cors do
allow do origins '' resource '', :headers => :any, :methods => [:get, :post, :options] end end
============================================================================================================= config/initializers/devise.rb
config.http_authenticatable_on_xhr = false config.navigational_formats = ["/", :html, :json]
============================================================================================================= Custom Devise Sessions Controller: app/controllers/sessions_controller.rb
class SessionsController < Devise::SessionsController
def create if request.xhr? resource = warden.authenticate!(:scope => resource_name, :recall => "sessions#failure") return sign_in_and_redirect(resource_name, resource) else super end end
def sign_in_and_redirect(resource_or_scope, resource=nil)
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
return render :json => {:success => true, :redirect => stored_location_for(scope) ||
after_sign_in_path_for(resource)}
end
def failure return render:json => {:success => false, :errors => ["Login failed."]} end
end
============================================================================================================= Custom Devise Sessions Controller: config/routes.rb
devise_for :users, :controllers => {:sessions => 'sessions'}