Ruby on rails Rails api gem和设计令牌身份验证
如果有人能透露一些信息,我将不胜感激,因为我在这个问题上有点不知所措。基本上,我正在尝试使用构建在gem之上的仅JSON的rails rest api应用程序来完成designe身份验证 我已经实现了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
会话
和注册
处理,如下所述
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]