2012-01-28 23 views
9

Tôi muốn đăng ký người dùng mới qua JSON nhưng tôi nhận được lỗi mã thông báo xác thực không hợp lệ.Rails/Devise - Tạo người dùng mới thông qua yêu cầu json

Tôi không muốn bật kiểm tra giả mạo cho tất cả bộ điều khiển. Bất kỳ đề xuất về cách ghi đè lên các đăng ký điều khiển để làm điều này?

Đây là mã của tôi:

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

Tuyến đường:

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

tôi nhận được một lỗi:

Routing Error 
uninitialized constant Api::MobileRegistrationsController 

Trả lời

0

Bạn có thể buil điều khiển của riêng bạn mà không xuất phát từ một devise điều khiển.

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

Tôi nghĩ bạn có ý tưởng. Bạn chỉ cần khởi tạo Người dùng của mình giống như bạn sẽ làm trong Rails console. Tôi không khuyên bạn nên thực hành loại này mặc dù

3

Tôi không thể khuyến khích bạn theo cách này, vì ứng dụng của bạn sẽ dễ bị tấn công CSRF.

Một nguồn lực tốt để hiểu CSRF: Understanding the Rails Authenticity Token

Bạn khá nên bao gồm các authenticity_token trong yêu cầu POST của bạn. Này được thảo luận trong một số câu hỏi về SO, như có (đọc tất cả các câu trả lời): rails - InvalidAuthenticityToken for json/xml requests

Ý tưởng:

  1. Lấy mã thông báo với <%= form_authenticity_token %>

  2. Thêm một param authenticity_token POST để bạn yêu cầu với mã thông báo.

Nếu bạn vượt qua param bởi URI, đừng quên để mã hóa các giá trị mã thông báo:

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

Đối với lỗi của bạn

Routing Error uninitialized constant Api::MobileRegistrationsController

nó chỉ điều khiển của bạn không nằm trong đúng thư mục. Vì bạn đang sử dụng

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

Bạn cần phải đưa MobileRegistrations vào bộ điều khiển/thư mục api. hoặc bạn có thể sử dụng

scope "/api" do 
    resources :MobileRegistrations, :only => [:create] 
end 
Các vấn đề liên quan