Rails/Devise - Creating new users via json request
我想通过JSON做一个新的用户注册,但是我得到了一个无效的真实性令牌错误。
我不想打开所有控制器的伪造支票。有关于如何覆盖注册控制器的建议吗?
这是我的代码:
1 2 3 4 5 6 7 | class Api::MobileRegistrationsController < Devise::RegistrationsController skip_before_filter :verify_authenticity_token respond_to :json def create super end end |
路线:
1 2 3 4 5 6 7 | Whitney::Application.routes.draw do resources :apps devise_for :users namespace :api do resources :tokens, :only => [:create, :destroy] resources :MobileRegistrations, :only => [:create] end |
号
我得到一个错误:
1 2 | Routing Error uninitialized constant Api::MobileRegistrationsController |
我不能用这种方式鼓励你,因为你的应用程序很容易受到CSRF攻击。
了解CSRF的一个好资源:了解Rails真实性令牌
你最好把EDOCX1[1]包含在你的请求中。这在一些关于so的问题中进行了讨论,例如(阅读所有答案):rails-invalidauthentitytoken for json/xml请求
想法:
使用
在您的请求中添加一个
如果通过uri传递参数,请不要忘记对令牌值进行编码:
1 | url +="&authenticity_token=" + encodeURIComponent( <%= form_authenticity_token %> ); |
号
因为你的错误
Routing Error uninitialized constant
Api::MobileRegistrationsController
号
它表示控制器不在正确的文件夹中。因为你在使用
1 2 3 4 | namespace :api do resources :tokens, :only => [:create, :destroy] resources :MobileRegistrations, :only => [:create] end |
您需要将mobileregistrations放到controllers/api文件夹中。或者你可以用
1 2 3 | scope"/api" do resources :MobileRegistrations, :only => [:create] end |
。
您可以构建自己的控制器,它不是从一个设计控制器派生出来的。
1 2 3 4 5 6 7 8 | def UserSignupApiController < ApplicationController skip_before_filter :authenticate_user! respond_to :json def create @user = User.create(params[user]) respond_with(@user) end end |
我想你明白了。就像在