2015-05-19 14 views
7

Otrzymuję POST https://heroku_client_path.herokuapp.com/login 405 (Not Allowed) dla aplikacji ember.js z api poręcze (zarówno na Heroku)Ember POST 405 (niedozwolone) w/Rails API

Podczas przetwarzania login lub zarejestruj się. Uważam, że adres URL żądania powinien być ścieżką/loginem heroku, ponieważ ustawiam mój ADAPTER_URL heroku config var, a nie adres URL klienta heroku pokazany powyżej.

Uważam, że poprawnie skonfigurowałem CORS.

Używam Ember-CLI. Wyciągnąłem rękę, nie jest to Simple-Auth.

environment.js:

module.exports = function(environment) { 
    var ENV = { 
    modulePrefix: 'client-rantly', 
    environment: environment, 
    baseURL: '/', 
    adapterURL: process.env.ADAPTER_URL, 
    locationType: 'auto', 
    EmberENV: { 
     FEATURES: { 
     } 
    }, 
    }; 

    if (environment === 'development') { 
    } 

    if (environment === 'production') { 
    } 

    return ENV; 
}; 

adaptery/application.js:

import DS from 'ember-data'; 
import ENV from '../config/environment'; 

export default DS.ActiveModelAdapter.extend({ 
    host: ENV.adapterURL || ENV.ADAPTER_URL, 
    headers: function() { 
    return { 
     'auth_token': localStorage.getItem('authToken') 
    }; 
    }.property('authToken') 
}); 

brocfile.js

var EmberApp = require('ember-cli/lib/broccoli/ember-app'); 

var app = new EmberApp({ 
    dotEnv: { 
    clientAllowedKeys: ['ADAPTER_URL'] 
    } 
}); 
module.exports = app.toTree(); 

Kontrolery/application.js

import Ember from 'ember'; 

export default Ember.Controller.extend({ 
    needs: ['search'], 
    isAuthenticated: false, 

    init: function() { 
    var authToken = localStorage.getItem('authToken'); 
    if(authToken) { 
     this.isAuthenticated = true; 
    } 
    }, 

    actions: { 

    login: function() { 
     var credentials = { 
     email: this.get('email'), 
     password: this.get('password') 
     }; 

     this.set('errorMessage', null); 
     return Ember.$.post('login', credentials).then(function(response){ 
     this.set('errorMessage', response.error); 
     if (response.auth_token) { 
      localStorage.setItem('authToken', response.auth_token); 
      localStorage.setItem('userId', response.user_id); 
      this.set('isAuthenticated', true); 
      location.reload(); 
     } 
     }.bind(this)); 
    }, 
    } 
}); 

Cors boczne szyny - config/environment.rb

require File.expand_path('../boot', __FILE__) 
require 'rails/all' 

Bundler.require(*Rails.groups) 

module ServerRantly 
    class Application < Rails::Application 
    config.active_record.raise_in_transactional_callbacks = true 
    config.autoload_paths << Rails.root.join('lib') 

    config.middleware.insert_before 0, "Rack::Cors", :debug => true, :logger => (-> { Rails.logger }) do 
     allow do 
     origins '*' 

     resource '/cors', 
      :headers => :any, 
      :methods => [:post], 
      :credentials => true, 
      :max_age => 0 

     resource '*', 
      :headers => :any, 
      :methods => [:get, :post, :delete, :put, :options, :head], 
      :max_age => 0 
     end 
    end 
    end 
end 
+0

To wygląda na problem z szynami. Czy przetestowałeś backend z listonoszem lub curl? Czy trasa jest obecna? Czy próbujesz zażądać html, kiedy powinien być json? – user2105103

+0

@ user2105103 Testowałem z listonoszem i przetwarza ono żądanie POST. Zwraca poprawną odpowiedź JSON. Jednak z adresem URL serwera szyny, który nie jest wysyłany. Nawet próbował twarde kodowanie pełnego adresu URL w miejsce "logowania" dla tej akcji w kontrolerze bez powodzenia. – Jadam

+0

Czy możesz spróbować użyć tego [https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi) rozszerzenia dla chrome, aby uniknąć dochodzenia CORS? –

Odpowiedz

1

Na tej linii:

adapterURL: process.env.ADAPTER_URL 

Gdzie jest process.env.ADAPTER_URL zdefiniowane?

Wygląda na to, że jesteś na dobrej drodze z przesłonięciem host na adapterze ActiveModelAdapter, aby użyć adresu URL spoza nazwy klienta.

+0

Lokalnie wskazuje na localhost, chociaż na Heroku mam to wskazując na mój serwer railsowy również hostowany na Heroku, dlatego uważam za dziwne, że nawet przy wskazaniu, że nadal działa POST przeciwko adresowi URL klienta Ember. – Jadam

Powiązane problemy