Ember/Rails CORS Simple-Auth 405 (не разрешено)

У меня есть приложение ember-cli с ActiveModelAdapter для Rails API, использующее rack-cors. Я настроил оба для использования ember-cli -simple-auth-devise.

Локально в разработке все работает отлично. Но как только я развертываю приложение ember-cli на Heroku, я не могу аутентифицировать свой вход, но могу получить другие записи. Я получаю следующую ошибку 405:

POST http://example.herokuapp.com/businesses/sign_in 405 (не разрешено)

Возможно, это связано с тем, что я использую Business вместо User для своей модели Devise, но я меняю User на Business в application_controller (плюс, иначе это не будет работать локально):

## /backend/app/controllers/application_controller.rb

class ApplicationController < ActionController::Base
 before_filter :authenticate_user_from_token!

 private

 def authenticate_user_from_token!
   authenticate_with_http_token do |token, options|
     user_email = options[:user_email].presence
     user       = user_email && Business.find_by_email(user_email) 
     ## /\ Changed User to Business /\

     if user && Devise.secure_compare(user.authentication_token, token)
       sign_in user, store: false
     end
   end
 end
end

Конфигурация стойки:

## /backend/config.ru

require ::File.expand_path('../config/environment',  __FILE__)
run Rails.application

require 'rack/cors'
use Rack::Cors do

  # allow all origins in development
  allow do
    origins '*'
    resource '*', 
        :headers => :any, 
        :methods => [:get, :post, :delete, :put, :options]
  end
end

Я настроил simple-auth-devise так:

// frontend/config/environment.js

ENV['simple-auth-devise'] = {
    serverTokenEndpoint: 'businesses/sign_in',
    resourceName: 'business',
    crossOriginWhitelist: ['http://example-backend.herokuapp.com/']
};

Любое понимание этого будет высоко оценено.

Спасибо!

** Обновление ** Я сузил его до факта, что это POST для example.herokuapp.com, а не для моего внутреннего URL-адреса rails example-backend.herokuapp.com. Поэтому я думаю, что это связано с тем, что ember-cli-simple-auth не использует прокси-сервер, который я установил с помощью heroku, как это делает магазин.


person bahudso    schedule 14.10.2014    source источник
comment
это 405 или 406? 406 является неприемлемым, что указывает на то, что, например. вы запрашиваете JSON, а сервер поддерживает только ответы HTML.   -  person marcoow    schedule 15.10.2014
comment
@marcoow Это 405, я обновил заголовок. Мой сервер rails возвращает только JSON   -  person bahudso    schedule 15.10.2014
comment
Я думаю, что вы должны обязательно опубликовать всю ошибку. Вы можете получить журналы из Heroku, запустив heroku logs (devcenter.heroku.com/articles/logging ). Кстати, вы уверены, что ничего не связано с CSFR?   -  person Tom Hert    schedule 18.10.2014


Ответы (1)


Вам необходимо настроить serverTokenEndpoint, включая хост, если хост не тот, с которого обслуживается приложение Ember:

ENV['simple-auth-devise'] = {
  serverTokenEndpoint:  'http://example-backend.herokuapp.com/businesses/sign_in',
  resourceName:         'business',
  crossOriginWhitelist: ['http://example-backend.herokuapp.com/']
};
person marcoow    schedule 17.10.2014