【问题标题】:Create Devise user via JSON call通过 JSON 调用创建设计用户
【发布时间】:2015-03-09 12:58:23
【问题描述】:

我正在学习如何使用 rails 进行和处理 api 调用。我正在使用 Devise 处理我的用户身份验证/注册等,但似乎在发出发布请求时遇到问题。

为了允许用户注册,我应该创建自己的注册控制器并从设计继承吗?或者有没有办法通过devises控制器处理json请求?

我见过的一个可以简化流程的例子是

class RegistrationsController < Devise::RegistrationsController
  respond_to :json
    def create
      super
    end
end

路线

constraints(subdomain: 'api') do
  devise_for :users, path: 'lnf', controllers: { registrations: "registrations" }
end

所以我的基本网址看起来像api.local.dev:3000

但是使用这种方法,这是否意味着我可以向以下 url 发出 curl 请求?

 http://api.local.dev:3000/lnf/users/sign_up

【问题讨论】:

    标签: ruby-on-rails ruby json devise


    【解决方案1】:

    您应该禁用 CSRF 保护并启用 JSON 响应类型:

    class RegistrationsController < Devise::RegistrationsController
    
      skip_before_action :verify_authenticity_token
    
      respond_to :json
    
    end  
    

    然后只需调用带有参数和格式后缀(.json)的 POST 请求

    curl -X POST \
      --form "user[email]=user111@example.com" \
      --form "user[password]=password" \
      --form "user[password_confirmation]=password" \
      'http://localhost:3000/users.json'
    

    【讨论】:

    • 感谢您的回答,我认为设计期望其数据采用以下格式 curl -v -H "Accept: application/json" -H "Content-type: application/json" -X POST -d '{"user":{"username":"myusername"}}' http://api.local.dev:3000/lnf/registrations/create 但我得到 ActionController::RoutingError (No route matches [POST] "/registrations/create"
    • 使用rake routes 找到您的注册控制器和操作的正确路径。
    • 这是此操作的 rake 路由的输出user_registration POST /lnf(.:format) registrations#create {:subdomain=&gt;"api"}
    • 请问您是如何得出这个结论的?我错过了什么我应该看的?
    • 你说得对,谢谢,但很想知道它为什么起作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 1970-01-01
    • 2017-04-12
    相关资源
    最近更新 更多