Rails / Devise - Создание новых пользователей по запросу json - PullRequest
10 голосов
/ 28 января 2012

Я хотел бы выполнить регистрацию нового пользователя через JSON, но получаю неверную ошибку токена подлинности.

Я бы не хотел проверять подделку для всех контроллеров. Любые предложения о том, как переопределить контроллер регистрации для этого?

Вот мой код:

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

Маршруты:

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

Я получаю сообщение об ошибке:

Routing Error
uninitialized constant Api::MobileRegistrationsController

Ответы [ 3 ]

4 голосов
/ 28 января 2012

Я не могу вас так поощрять, потому что ваше приложение будет уязвимо для CSRF-атак.

Хороший ресурс для понимания CSRF: Понимание токена подлинности Rails

Вы должны включить authenticity_token в запрос POST. Это обсуждается в некоторых вопросах о SO, например, там (прочитайте все ответы): rails - InvalidAuthenticityToken для запросов json / xml

Идея:

  1. Получите токен с помощью <%= form_authenticity_token %>

  2. Добавьте в запрос запрос authenticity_token POST с токеном.

Если вы передаете параметр по URI, не забудьте закодировать значение токена:

url += "&authenticity_token=" + encodeURIComponent( <%= form_authenticity_token %> );
0 голосов
/ 03 апреля 2013

По вашей ошибке

Ошибка маршрутизации неинициализированная константа Api :: MobileRegistrationsController

указывает, что ваш контроллер находится не в той папке.Поскольку вы используете

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

Вы должны поместить свои MobileRegistrations в папку controllers / api.или вы можете использовать

scope "/api" do
  resources :MobileRegistrations, :only => [:create] 
end
0 голосов
/ 28 января 2012

Вы можете создать свой собственный контроллер, который не является производным от контроллера устройства.

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

Я думаю, вы поняли идею.Вы просто создаете экземпляр своего Пользователя так же, как и в Rails console. Я не рекомендую такую ​​практику, хотя

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...