使用json帖子从移动应用程序使用Devise注册帐户

时间:2012-11-30 18:48:22

标签: android ruby-on-rails api devise

我是rails的新手,我希望能够从Android设备上的rails应用程序注册帐户获得帮助。 目前我正在使用Devise gem进行用户注册。我能够使用设计令牌让用户身份验证正常工作,但我仍然坚持如何通过手机注册帐户。

到目前为止,我正在研究两种方法。我的第一次尝试是创建一个名为MobileRegistrationsController的新控制器,并使用如下的创建方法:

class Api::V1::MobileRegistrationsController  < ApplicationController
  respond_to :json

  def create
    @user = User.create!(params[user])
    @user.ensure_authentication_token!

    respond_to do |format|
      format.json { render json: @user }
    end
  end
end

这是我的路线文件夹。我按照railscast教程进行了这个:

namespace :api do

  namespace :v1  do
    resources :tokens,:only => [:create, :destroy], :defaults => { :format => 'json' }
    match 'register' => 'mobile_registrations#create', :via => "post", :defaults => { :format => 'json' }
  end
end

从这里开始,当我使用我的REST客户端尝试向

发送帖子请求时
localhost:3000/api/v1/register

我收到错误

ActionController::RoutingError (uninitialized constant    Api::V1::MobileRegistrationsController):

所以我猜我在做一些根本错误的事情。 我已经google了,也许覆盖Devise会话控制器是一个更好的方法? 有没有人有这方面的经验,这可能会有所帮助?

谢谢!

更新:所以我正在尝试一条新路线。将其添加到我的路线文件夹

devise_scope :user do
   match "api/v1/register" => "devise/registrations#create"
end

当我尝试向此发送帖子请求时。我收到了另一个错误:

WARNING: Can't verify CSRF token authenticity

我猜这比以前更好。所以现在我只需要弄清楚如何获得我的rails真实性令牌。

1 个答案:

答案 0 :(得分:2)

好的。所以我能够搞清楚。万一有人偶然发现并有同样的问题。看起来它是我代码中的一些错误的组合。

我重命名了我的控制器,因为我认为“未初始化的常量”错误是由于控制器命名不当造成的。为了简单起见,我只是将我的控制器重命名为RegistersController。这样就修复了我的路由错误。

这引出了一个新的bug,即CSRF令牌。 我添加了一行:

  

skip_before_filter:verify_authenticity_token,:only =&gt; :创建

其中跳过了验证方法。这对我来说是一个很大的模糊,因为我认为会增加我的应用程序的漏洞,所以如果有人有更好的解决方案,请告诉我。

之后,我在创建方法中留下了一个新错误,即:

  

验证失败:电子邮件不能为空,密码不能为空

要解决此问题,我将创建方法更改为:

  

@user = User.create!(:email =&gt; params [:email],:password =&gt; params [:password],:password_confirmation =&gt; params [:password_confirmation])

我还改变了我的json响应以包含我的真实性令牌,我将其作为共享偏好存储在我的Android应用程序中。

  

format.json {render:status =&gt; 200,:json =&gt; {:token =&gt; @ user.authentication_token,:user =&gt; @user}}