我正在编写一个网站,它没有合法的选项来编辑用户。 一旦创建,就不能改变任何东西。
这是我的问题: 是否可以在不使用编辑表单的情况下更改用户数据(例如通过发送补丁请求)(因为我没有创建一个),由第三方(a.k.a。而不是主机)?
正如Rails 5所要求的那样,我使用强大的params(在通过注册表单创建用户时发送用户名和密码)。
@routes
Prefix Verb URI Pattern Controller#Action
root GET / sessions#new
signup GET /signup(.:format) users#new
POST /signup(.:format) users#create
login GET /login(.:format) sessions#new
POST /login(.:format) sessions#create
logout DELETE /logout(.:format) sessions#destroy
users GET /users(.:format) users#index
POST /users(.:format) users#create
new_user GET /users/new(.:format) users#new
edit_user GET /users/:id/edit(.:format) users#edit
user GET /users/:id(.:format) users#show
PATCH /users/:id(.:format) users#update
PUT /users/:id(.:format) users#update
DELETE /users/:id(.:format) users#destroy
还应该提到没有更新方法,但我正在使用
resources :users
答案 0 :(得分:2)
对于您的数据库的第三方访问,您可能需要一个API。
简化示例:
您应用的网址为https://myapp.example.com/。
配置/ routes.rb中:
namespace :api do
namespace :v1 do
resources :users, only: [:update]
end
end
rake routes:
Prefix Verb URI Pattern Controller#Action
api_v1_user PATCH /api/v1/users/:id(.:format) api/v1/users#update
PUT /api/v1/users/:id(.:format) api/v1/users#update
应用程序/控制器/ API / V1 / base_controller.rb:
class Api::V1::BaseController < ActionController::Base
# Prevent CSRF attacks by raising an exception.
protect_from_forgery with: :null_session
end
应用程序/控制器/ API / V1 / users_controller.rb:
class Api::V1::UsersController < Api::V1::BaseController
def update
# check params, maybe look for some security tokens
user = User.find(params[:id])
if user
user.update_attribute(:name, params[:name])
render plain: "success" and return
else
render plain: "failure" and return
end
end
end
然后请求这样
curl -X PATCH https://myapp.example.com/api/v1/users/1?name=new_name
会将id = 1 users
的{{1}}更改为“new_name”。
要获得正确的API设计,您可以查看http://jsonapi.org/。