我正在使用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"
}
如何检查错误发生的位置或如何解决?
答案 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
,因此不会抱怨它。