【发布时间】:2016-10-17 14:08:15
【问题描述】:
我在我的 Rails 项目中安装 Grape 以构建 RESTful API。
现在一些端点的操作需要身份验证,而另一些则不需要身份验证。
例如,我有 users 端点,它看起来像:
module Backend
module V1
class Users < Grape::API
include Backend::V1::Defaults
before { authenticate! }
resource :users do
desc "Return a user"
params do
requires :id, type: Integer, desc: 'User id'
end
get ':id' do
UsersService::Fetch.new(current_user,params).call
end
desc "Update a user"
params do
requires :id, type: Integer, desc: 'User id'
requires :display_name, type: String, desc: 'Display name'
requires :email, type: String, desc: 'Email'
end
post ':id' do
UsersService::Save.new(current_user,params).call
end
desc "Reset user password"
params do
requires :old_password, type: String, desc: 'old password'
requires :password, type: String, desc: 'new password'
end
post 'password/reset' do
PasswordService::Reset.new(current_user,params).call
end
desc "Forget password"
params do
requires :email, type: String
end
post 'password/forget' do
PasswordService::Forget.new(current_user,params).call
end
end
end
end
end
现在您可以看到,除了password/forget 之外的所有操作都需要用户登录/验证。创建一个新的端点也没有意义,比如说passwords 并在那里删除password/forget,从逻辑上讲,这个端点应该与用户资源相关。
问题在于 Grape before 过滤器没有像 except, only 这样的选项,我可以说将过滤器应用于某些操作。
您通常如何以干净的方式处理此类案件?
【问题讨论】:
标签: ruby-on-rails ruby grape grape-api