2012-01-28 63 views
9

我想通過JSON做一個新的用戶註冊,但我得到一個無效的真實性令牌錯誤。Rails/Devise - 通過json請求創建新用戶

我想不打開所有控制器的僞造檢查。有關如何覆蓋registrationcontroller來做到這一點的任何建議?

這裏是我的代碼:

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 

回答

0

你可以BUIL自己的控制器,它不是從有一項派生控制器。

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中那樣實例化你的用戶。 雖然我不推薦這種做法

3

我不能鼓勵你這樣做,因爲你的應用程序很容易受到CSRF攻擊。

一個很好的資源,瞭解CSRF:Understanding the Rails Authenticity Token

你還是在您的POST請求authenticity_token。這是在SO一些問題的討論,好像有(讀所有的答案):rails - InvalidAuthenticityToken for json/xml requests

的想法:

  1. 檢索令牌<%= form_authenticity_token %>

  2. 一個authenticity_token POST PARAM添加到您的請求令牌。

如果通過URI通過帕拉姆,不要忘了編碼的令牌值:

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

對於您的錯誤

Routing Error uninitialized constant Api::MobileRegistrationsController

它表明你的控制器是不是在正確的文件夾 由於您使用

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

你需要把你的MobileRegistrations到控制器/ API文件夾中。或者您可以使用

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