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
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
@ 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
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? –