Ich bin ein POST https://heroku_client_path.herokuapp.com/login 405 (Not Allowed)
für eine Ember.js App mit einem Rails-api bekommen (sowohl auf Heroku)Ember POST 405 (nicht erlaubt) w/Rails API
Wenn ein Login-Verarbeitung oder registrieren Sie sich. Ich denke, die Request-URL sollte der Heroku-Serverpfad/Login sein, da ich meine ADAPTER_URL
heroku config var und nicht die oben angezeigte heroku-Client-URL einstelle.
Ich glaube, ich habe CORS Setup richtig eingerichtet.
Ich benutze Ember-CLI. Ich rolle die Auth, es ist nicht 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;
};
Adapter/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();
Controller/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 Schienen Seite - config/application.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
Das sieht wie ein Schienenproblem aus. Hast du das Backend mit Postboten oder Curl getestet? Ist die Route vorhanden? Versuchen Sie, HTML anzufordern, wenn es json sein sollte? – user2105103
@ user2105103 Ich habe mit Postboten getestet und es verarbeitet die POST-Anfrage ganz gut. Es gibt die richtige JSON-Antwort zurück. Obwohl mit der Rails-Server-URL, die nicht gesendet wird. Sogar versucht, die volle URL anstelle von "Login" für diese Aktion im Controller ohne Glück zu kodieren. – Jadam
Können Sie versuchen, [this] (https://chrome.google.com/webstore/detail/allow-control-allow-origi/nlfbmbojpeacfghkpbjhddihlkkiljbi) Erweiterung für Chrome zu verwenden, um CORS-Untersuchung zu vermeiden? –