1

API を CORS で動作させるのに苦労しています。http://kellishaver.tumblr.com/post/40758797489/cors-headers-with-deviseの指示に従いました。

これを私のapplication.rbに追加しました:

config.middleware.use "Cors"
config.middleware.insert_before Warden::Manager, "Cors"

これを /lib/cors.rb に追加しました:

class Cors
  def initialize(app)
  @app = app
end

def call(env)
   status, headers, response = @app.call(env)

   headers['Access-Control-Allow-Origin'] = '*'
   headers['Access-Control-Allow-Methods'] = 'DELETE, GET, HEAD, OPTIONS, POST, PUT'
   headers['Access-Control-Max-Age'] = "1728001"

   [status, headers, response]
 end
end

私は同じ問題を解決しようとしており、API を Chrome (または他の場所) から呼び出せるようにしています。問題は、カスタム API Devise 呼び出しを除いて、すべての呼び出しが機能することです。Chrome 開発ツールで見ると、Devise API 呼び出しで「OPTIONS」の奇妙な 404 エラーが発生します。

私のDevise APIは次のようになります...

class Api::V1::SessionsController < Devise::SessionsController
   skip_before_filter :verify_authenticity_token,
                 :if => Proc.new { |c| c.request.format == 'application/json' }

   respond_to :json
   def create
   warden.authenticate!(:scope => resource_name, :recall => "#{controller_path}#failure")

   render :status => 200,
       :json => { :success => true,
                  :info => "Logged in",
                  :data => { :auth_token => current_user.authentication_token },
                  :id => current_user.id}
  end
...

カスタムの Devise API 呼び出しが機能しないのに、他の呼び出しが機能する理由についてのアイデアはありますか?

ありがとう!

4

1 に答える 1

0

動作しました。上記のコードの代わりに rack-cors gem に切り替えて、こちらのブログの例に従ってください: https://gist.github.com/AdrianTeh/3561310

于 2013-07-07T03:18:48.207 に答える