2012-01-28 22 views
9

Vorrei fare una nuova registrazione utente tramite JSON ma ottengo un errore di token di autenticità non valido.Rails/Devise - Creazione di nuovi utenti tramite la richiesta json

Mi piacerebbe non attivare il controllo contraffazione per tutti i controller. Qualche suggerimento su come sovrascrivere il controller di registrazione per fare questo?

Ecco il mio codice:

class Api::MobileRegistrationsController < Devise::RegistrationsController 
    skip_before_filter :verify_authenticity_token 
    respond_to :json 
    def create 
    super 
    end 
end 

Routes:

Whitney::Application.routes.draw do 
    resources :apps 
    devise_for :users 
    namespace :api do 
    resources :tokens, :only => [:create, :destroy] 
    resources :MobileRegistrations, :only => [:create] 
    end 

ottengo un errore:

Routing Error 
uninitialized constant Api::MobileRegistrationsController 

risposta

0

Potreste buil il proprio controller che non deriva da una disposizione testamentaria controller.

def UserSignupApiController < ApplicationController 
    skip_before_filter :authenticate_user! 
    respond_to :json 
    def create 
    @user = User.create(params[user]) 
    respond_with(@user) 
    end 
end 

Penso che tu abbia l'idea. Basta istanziare il tuo utente proprio come faresti in Rails console. Non consiglio questo tipo di pratica anche se

3

Non posso incoraggiarti in questo modo, perché la tua app sarà vulnerabile agli attacchi CSRF.

Una buona risorsa per capire CSRF: Understanding the Rails Authenticity Token

Si dovrebbe invece includere il authenticity_token nella richiesta POST. Questo è discusso in alcune domande sul SO, come se ci fosse (leggi tutte le risposte): rails - InvalidAuthenticityToken for json/xml requests

L'idea:

  1. Recuperare il token con <%= form_authenticity_token %>

  2. Aggiungi un param authenticity_token POST al tuo richiesta con il token.

Se si passa il param da URI, non dimenticate di codifica il valore simbolico:

url += "&authenticity_token=" + encodeURIComponent(<%= form_authenticity_token %>); 
0

Per il vostro errore

Routing Error uninitialized constant Api::MobileRegistrationsController

indica il controller non è nella cartella corretta. Poiché si utilizza

namespace :api do 
    resources :tokens, :only => [:create, :destroy] 
    resources :MobileRegistrations, :only => [:create] 
    end 

Hai bisogno di mettere i vostri MobileRegistrations nella cartella controllori/api. oppure è possibile utilizzare

scope "/api" do 
    resources :MobileRegistrations, :only => [:create] 
end 
Problemi correlati