Grape令牌验证"错误":" 404未找到API版本"

时间:2016-11-18 08:04:11

标签: ruby-on-rails ruby-on-rails-3 grape-api

我正在使用rails应用程序,设置葡萄,并尝试验证所有端点。所以尝试了葡萄令牌auth https://github.com/mcordell/grape_token_auth并按照github doc中的说明进行设置。这些是我的配置。

初​​始化/ gta.rb

GrapeTokenAuth.setup! do |config|
  config.mappings = { user: User }
  config.secret   = 'aaa'
end

对于api,这是文件夹结构

app/api/tmo/api.rb -> mounted two version root file
app/api/tmo/vl/root.rb -> mounted all the other files for v1
app/api/tmo/vl/restaurants.rb -> here lies the mount authentication

include GrapeTokenAuth::MountHelpers
include GrapeTokenAuth::TokenAuthentication
mount_registration(to: '/auth', for: :user)
mount_sessions(to: '/auth', for: :user)
mount_token_validation(to: '/auth', for: :user)
mount_confirmation(to: '/auth', for: :user)

所以我的路线就像

Running via Spring preloader in process 9309
POST       /auth/api/v1(/.:format)
DELETE     /auth/api/v1(/.:format)
PUT        /auth/api/v1(/.:format)
POST       /auth/api/v1/sign_in(.:format)
DELETE     /auth/api/v1/sign_out(.:format)
GET        /auth/api/v1/validate_token(.:format)
GET        /auth/confirmation/api/v1(/.:format)
GET        /api/v1/statuses/public_timeline(.:format)

当我访问/ api / v1 / statuses / public_timeline时,它说401未经授权,所以authenticate_user!方法正在运作

但是当我发布到/ auth / api / v1时,我收到以下错误

{  
  "error": "404 API Version Not Found"
}

如何检查错误发生的位置或如何解决?

1 个答案:

答案 0 :(得分:0)

尝试设置grape_token_auth时,我遇到了完全相同的问题。我通过执行以下操作解决了这个问题:

namespace :auth do
  mount_registration(to: '/', for: :user)
  mount_sessions(to: '/', for: :user)
  mount_token_validation(to: '/', for: :user)
  mount_confirmation(to: '/ ', for: :user)
end

在这种情况下,您可以调用v1/auth/sign_out,并且应该可以使用。如果没有命名空间,您可以直接以这种方式调用端点:v1/sign_out

不确定Grape API是否有意或是否有更改,但使用默认配置to: '/auth'会将auth端点的根目录更改为/auth,这意味着您必须调用端点如/auth/v1/sign_out,并通过其他方式向Grape提供version,因此不会抱怨它。

最初发布在Screenshot React Slick