我是 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/