I'm struggling to find a way of signing up a new user in my application. I've started using Ember and Rails a month ago and I'm not quite sure where the problem is. I can actually login with Devise and get data from my backend. I can create new instances of any models, except for users. After a week of reading and testing, I believe Devise is not using the user serializer and can't process my request.
Here's what I get when I request a new user registration :
Processing by Users::UsersController#create as JSON
Parameters: {"email"=>"qw.qw@we.we", "encrypted_password"=>"[FILTERED]", "firstname"=>"qw", "lastname"=>"qw", "user"=>{"email"=>"qw.qw@we.we", "encrypted_password"=>"[FILTERED]", "firstname"=>"qw", "lastname"=>"qw"}}
Can't verify CSRF token authenticity
(0.1ms) begin transaction
User Exists (1.7ms) SELECT 1 AS one FROM "users" WHERE "users"."email" = 'qw.qw@we.we' LIMIT 1
(0.1ms) rollback transaction
[active_model_serializers] Rendered ActiveModel::Serializer::Null with Hash (0.2ms)
And when I login:
Processing by SessionsController#create as JSON
Parameters: {"user"=>{"password"=>"[FILTERED]", "email"=>"test@test.com"}}
Now here is my Ember serializer:
import Ember from 'ember';
import DS from 'ember-data';
var underscore = Ember.String.underscore;
export default DS.JSONAPISerializer.extend({
keyForAttribute: function(attr) {
return underscore(attr);
},
keyForRelationship: function(rawKey) {
return underscore(rawKey);
},
serialize() {
const result = this._super(...arguments),
attr = result.data.attributes || {},
rel = result.data.relationships || {};
return Object.keys(rel).reduce(function(acc, elem) {
const data = rel[elem].data;
if (data) {
acc[elem + "_id"] = data.id;
}
if (data && data.type) {
acc[elem + "_type"] = data.type[0].toUpperCase() + data.type.slice(1, -1);
}
return acc;
}, attr);
}
});
My adapter:
import DS from 'ember-data';
import DataAdapterMixin from 'ember-simple-auth/mixins/data-adapter-mixin';
export default DS.JSONAPIAdapter.extend(DataAdapterMixin, {
authorizer: 'authorizer:application'
});
And my client side:
var userNew = this.get('store').createRecord('user', {
email: email,
password: password,
firstname: firstname,
lastname: lastname
});
userNew.save();
The funny thing is I tried with the active-model-adapter addon. For some reasons I can register new users and login properly, but findRecord is giving me this error :
"Cannot read property '_internalModel' of undefined"
Here's my gemfile:
gem 'rails', '4.2.6'
gem 'sqlite3'
gem 'sass-rails', '~> 5.0'
gem 'uglifier', '>= 1.3.0'
gem 'coffee-rails', '~> 4.1.0'
gem 'jquery-rails'
gem 'turbolinks'
gem 'jbuilder', '~> 2.0'
gem 'sdoc', '~> 0.4.0', group: :doc
gem 'rack-cors'
gem "devise", :github => 'plataformatec/devise', :branch => 'master'
gem 'omniauth-oauth2', '~> 1.3.1'
gem "omniauth-google-oauth2", :github => 'zquestz/omniauth-google-oauth2', :branch => 'master'
gem "active_model_serializers", github: "rails-api/active_model_serializers", :branch => 'master'
And finally, my package.json:
"active-model-adapter": "2.1.1",
"broccoli-asset-rev": "^2.2.0",
"broccoli-clean-css": "1.1.0",
"ember-ajax": "0.7.1",
"ember-cli": "2.3.0",
"ember-cli-app-version": "^1.0.0",
"ember-cli-babel": "^5.1.5",
"ember-cli-dependency-checker": "^1.2.0",
"ember-cli-foundation-6-sass": "0.0.8",
"ember-cli-htmlbars": "^1.0.1",
"ember-cli-htmlbars-inline-precompile": "^0.3.1",
"ember-cli-ic-ajax": "0.2.4",
"ember-cli-inject-live-reload": "^1.3.1",
"ember-cli-qunit": "^1.2.1",
"ember-cli-release": "0.2.8",
"ember-cli-sass": "5.3.1",
"ember-cli-sri": "^2.0.0",
"ember-cli-star-rating": "0.4.0",
"ember-cli-uglify": "^1.2.0",
"ember-cp-validations": "2.6.1",
"ember-data": "^2.3.0",
"ember-disable-proxy-controllers": "^1.0.1",
"ember-export-application-global": "^1.0.4",
"ember-load-initializers": "^0.5.0",
"ember-masonry-grid": "1.1.0",
"ember-radio-button": "1.0.7",
"ember-resolver": "^2.0.3",
"ember-simple-auth": "1.0.1",
"loader.js": "^4.0.0",
"rails-csrf": "2.0.1",
"torii": "0.6.1"
I feel like I'm missing something obvious, but can't figure out what...
Aucun commentaire:
Enregistrer un commentaire