3

Rack-corsを使用して Rails API への ActiveModelAdapter を備えた ember-cli アプリがあります。ember-cli-simple-auth-deviseを使用するように両方を設定しました。

ローカルでの開発では、すべてが完全に機能します。しかし、ember-cli アプリを Heroku にデプロイすると、サインインを認証できなくなりますが、他のレコードを取得することはできます。次の 405 エラーが表示されます。

POST http://example.herokuapp.com/businesses/sign_in 405 (許可されていません)

おそらく、Devise モデルで User ではなく Business を使用しているという事実に関係しているのかもしれませんが、application_controller で User を Business に変更します (それ以外の場合はローカルで動作しません)。

## /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

Rack-cors 構成:

## /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/']
};

これについての洞察は大歓迎です。

ありがとう!

**更新** 私の Rails バックエンド URL example-backend.herokuapp.com ではなく、example.herokuapp.com への POST であるという事実に絞り込みました。これは、ストアが行っているように、heroku で設定したプロキシを使用していない ember-cli-simple-auth に関係していると思います。

4

1 に答える 1