Ruby on rails Rails api gem和设计令牌身份验证

Ruby on rails Rails api gem和设计令牌身份验证,ruby-on-rails,devise,rails-api,Ruby On Rails,Devise,Rails Api,如果有人能透露一些信息,我将不胜感激,因为我在这个问题上有点不知所措。基本上,我正在尝试使用构建在gem之上的仅JSON的rails rest api应用程序来完成designe身份验证 我已经实现了会话和注册处理,如下所述 class ApplicationController < ActionController::API include ActionController::MimeResponds end 仍然不确定这里可能存在什么问题-我假设发生这种情况是因为在使用Act

如果有人能透露一些信息,我将不胜感激,因为我在这个问题上有点不知所措。基本上,我正在尝试使用构建在gem之上的仅JSON的rails rest api应用程序来完成designe身份验证

我已经实现了
会话
注册
处理,如下所述

class ApplicationController < ActionController::API
    include ActionController::MimeResponds
end
仍然不确定这里可能存在什么问题-我假设发生这种情况是因为在使用
ActionController::API时缺少了一些可以正常工作的东西

更新 问题似乎出在我的
routes.rb
本身——这就是路由的实现方式

require 'api_constraints'

MyApi::Application.routes.draw do

  namespace :api, defaults: {format: 'json'} do
    scope module: :v1, constraints: ApiConstraints.new(version: 1,default: true) do
      devise_for :users
      resources :friends
      resources :locations
      resources :profiles
      resources :users


    end

    scope module: :v2, constraints: ApiConstraints.new(version: 2) do
    # Future releases of the API can go here
    end

  end

end
现在,如果重复
design\u for:users
范围外的操作,一切都开始工作

require 'api_constraints'

MyApi::Application.routes.draw do

  namespace :api, defaults: {format: 'json'} do
    scope module: :v1, constraints: ApiConstraints.new(version: 1,default: true) do
      devise_for :users
      resources :friends
      resources :locations
      resources :profiles
      resources :users


    end

    scope module: :v2, constraints: ApiConstraints.new(version: 2) do
    # Future releases of the API can go here
    end

  end
devise_for :users
end

有人能解释为什么吗

第1步。使用自定义控制器覆盖designe控制器,这些控制器将重定向替换为JSON响应

第二步。如果发生身份验证错误,控件将转到warden,warden将使用failure_应用程序,该应用程序只不过是一个机架应用程序,用于设置闪存消息,并根据请求的格式呈现/重定向。您需要一个自定义json响应,其中包含一个包含错误数组的错误键,而不是默认的错误键。因此,您需要在config/initializers下使用自定义的\u auth\u failure\u app.rb

第四步。现在,我们必须通过将其添加到
config/initializers/designe.rb
,告诉designe使用自定义故障应用程序:

config.warden do |manager|
  manager.failure_app = CustomAuthFailure
end
第五步。在designe模型中启用
token\u authenticable
,并将以下内容添加到
config/initializers/designe.rb

config.http_authenticatable = true
config.skip_session_storage = [:http_auth, :token_auth]
第六步。如果您使用的是不使用会话的真正JSON API,请使用warden(>1.2.2)版本,该版本具有处理nil会话的补丁


另外,请阅读我的文章,其中谈到了所有这些步骤。

对于任何有相同问题的人,如果在使用
designe\u-token\u-auth
rails-api
时,designe-helper方法(如
authenticate\u-user
不起作用),请尝试将这一行添加到app/controllers/application\u-controller.rb:

include developetokenauth::Concerns::SetUserByToken

当您在ApplicationController中运行
designe\u token\u auth
安装时。此问题类似于对用户进行身份验证。问题是,如果您使用的是
railsapi
,而不是普通的rails。因此,您必须手动添加它


不确定根本原因,但我怀疑这是因为rails api的ApplicationController继承自ActionController::api,这与vanilla rails的ApplicationController不同,后者继承自ActionController::Base。

谢谢emil,但问题是
验证用户
帮助程序不起作用。设置与您的相同。请查看此。那应该会有帮助的谢谢埃米尔:)看看第三步发生了什么?O.oQuestion更新-添加了路由。您的问题太棒了,我用它来修复我自己的代码。我希望你现在已经找到了解决办法:)
require 'api_constraints'

MyApi::Application.routes.draw do

  namespace :api, defaults: {format: 'json'} do
    scope module: :v1, constraints: ApiConstraints.new(version: 1,default: true) do
      devise_for :users
      resources :friends
      resources :locations
      resources :profiles
      resources :users


    end

    scope module: :v2, constraints: ApiConstraints.new(version: 2) do
    # Future releases of the API can go here
    end

  end
devise_for :users
end
config.warden do |manager|
  manager.failure_app = CustomAuthFailure
end
config.http_authenticatable = true
config.skip_session_storage = [:http_auth, :token_auth]