2012-01-28 23 views
9

chciałbym zrobić nową zarejestruj użytkownika za pośrednictwem JSON, ale pojawia się nieprawidłowy autentyczności tokenu błąd.Rails/Devise - Tworzenie nowych użytkowników poprzez żądanie json

Chciałbym nie włączyć sprawdzanie fałszerstwa dla wszystkich kontrolera. Wszelkie sugestie, w jaki sposób zastąpić registercontroller to zrobić?

Oto mój kod:

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

Trasy:

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

pojawia się błąd:

Routing Error 
uninitialized constant Api::MobileRegistrationsController 

Odpowiedz

0

Można Buila swój własny kontroler, który nie wynika z devise kontroler.

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

Myślę, że masz pomysł. Po prostu tworzysz swojego użytkownika, tak jak zrobiłbyś to w Rails console. Nie polecam tego rodzaju praktyki, ale

3

Nie mogę Cię zachęcić w ten sposób, ponieważ Twoja aplikacja będzie narażona na ataki CSRF.

dobrym źródłem do zrozumienia CSRF: Understanding the Rails Authenticity Token

Powinieneś raczej obejmować authenticity_token w żądaniu POST. Jest to omówione w niektórych pytań na SO, jak tam (czytaj wszystkie odpowiedzi): rails - InvalidAuthenticityToken for json/xml requests

Pomysł:

  1. pobrać tokena z <%= form_authenticity_token %>

  2. Dodaj param authenticity_token post na swoim żądanie z tokenem.

Jeśli przekazać param przez URI, nie zapomnij zakodowana wartość symboliczną:

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

Dla błędu

Routing Error uninitialized constant Api::MobileRegistrationsController

wskazuje kontroler nie jest w poprawny folder. Ponieważ używasz

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

trzeba umieścić w folderze MobileRegistrations kontrolery/API. Można też użyć

scope "/api" do 
    resources :MobileRegistrations, :only => [:create] 
end 
Powiązane problemy