2

我是 Rails 新手,我希望能在我的 Rails 应用程序上从 Android 设备上注册帐户时获得帮助。目前我正在使用 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):

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

谢谢!

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

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

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

WARNING: Can't verify CSRF token authenticity

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

4

1 回答 1

2

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

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

这导致我发现了一个新错误,即 CSRF 令牌。我添加了这一行:

skip_before_filter :verify_authenticity_token, :only => :create

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

因此,在那之后,我的 create 方法中出现了一个新错误,即:

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

为了解决这个问题,我将创建方法更改为:

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

我还更改了我的 json 响应以包含我的真实性令牌,我将其作为共享首选项存储在我的 android 应用程序中。

format.json { 渲染 :status=>200, :json=>{:token=>@user.authentication_token, :user => @user} }

于 2012-11-30T20:48:04.800 回答