android - 使用 json post 从移动应用程序中使用 Devise 注册帐户

标签 android ruby-on-rails api devise

我是 Rails 新手,希望获得有关从 Android 设备在 Rails 应用程序上注册帐户的帮助。 目前我正在使用 Devise gem 进行用户注册。我能够使用 devise 的 token 进行用户身份验证,但我不知道如何通过手机注册帐户。

到目前为止我正在研究两种方法。我的第一次尝试是创建一个名为 MobileRegistrationsController 的新 Controller ,并具有如下所示的创建方法:

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 session Controller 是更好的方法? 有没有人有这方面的经验,可以提供帮助?

谢谢!

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

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

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

WARNING: Can't verify CSRF token authenticity

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

最佳答案

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

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

这让我发现了一个新错误,即 CSRF token 。 我添加了这一行:

skip_before_filter :verify_authenticity_token, :only => :create

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

所以在那之后,我的创建方法中留下了一个新的错误,它是:

Validation failed: Email can't be blank, Password can't be blank

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

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

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

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

关于android - 使用 json post 从移动应用程序中使用 Devise 注册帐户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13651240/

相关文章:

android - 如何使用群集标记在谷歌地图标记 A-Z 中添加字母

android - 如何检查该词是否已在用户词典中可用?

ruby-on-rails - 删除包含文件的文件夹

ruby-on-rails - Paperclip w/Imagemagick、Amazon S3 和 Heroku - Imagemagick 和 S3 工作,但 Paperclip 字段未在数据库中设置。在开发中工作正常

database - 移动应用程序的后台数据同步

javascript - 当内容明显正确时,如何修复 XMLHttpRequest.open() 返回代码 0?

android - 运行错误 01 46,响应 : . ..UNABLETOCONNECT

android - 在抽象类中获取应用上下文

ruby-on-rails - Angular POST 请求在我未指定的参数中发送信息,Rails 抛出相关错误

php - API 平台中的自定义操作不会 Autowiring 实体