2013-07-13 8 views
13

ich versucht bin ein devise Benutzer über JSON zu registrieren, aber halten Sie ein ActiveModel::ForbiddenAttributesErrorRails 4 und Devise - Benutzer-Registrierung über JSON API

class Api::V1::RegistrationsController < ApplicationController 

    skip_before_filter :verify_authenticity_token 
    respond_to :json 

    def create 

    user = User.new(params[:user]) 

    if user.save 
     render :json => user.as_json(:auth_token=>user.authentication_token, :email=>user.email), :status=>201 
     return 
    else 
     warden.custom_failure! 
     render :json => user.errors, :status=>422 
    end 
    end 

    def user_params 
    params.require(:user).permit(:email, :password) 
    end 

end 

meine JSON Anfrage Hier bekommen:

Processing by Api::V1::RegistrationsController#create as JSON 
Parameters: {"user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]"}, "registration"=>{"user"=>{"email"=>"[email protected]", "password"=>"[FILTERED]"}}} 

Ich weiß, Das hat etwas mit starken Parametern zu tun, aber es war noch nicht in der Lage, es zu knacken.

Antwort

11

ich ändern würde:

user = User.new(params[:user]) 

mit:

user = User.new(user_params) 

Von docs:

# This will raise an ActiveModel::ForbiddenAttributes exception because it's using mass assignment 
# without an explicit permit step. 
def create 
    Person.create(params[:person]) 
end