Как обрабатывать маршрутизацию, связанную с «обязательными» параметрами? - PullRequest
2 голосов
/ 16 января 2012

Я использую Rails 3.1.0, и я хотел бы "требовать" строку параметров в URL-адресе маршрутизатора способом правильного . То есть у меня есть параметр token, который необходимо проверять при выполнении запроса HTTP POST, чтобы обновлять информацию о пользователе:

my_site_name/user/1?token=12345abcdr

Я планирую добавить ограничение в файл router.rb, чтобы «потребовать» token. Желательно ли? Должен ли я поступить так? Если да, как я могу указать соответствующий маршрутизатор?


Может быть, я мог бы указать / использовать «именованный маршрутизатор», передавая два параметра таким образом:

confirm_user_url(@user, token)

Ответы [ 2 ]

2 голосов
/ 17 января 2012

Насколько я понял, вы пытаетесь сделать параметр токена обязательным при «выполнении HTTP-запроса POST, чтобы обновить информацию пользователя» (кстати, не должен ли это быть запрос PUT, если вы ОБНОВЛЯЕТЕ?),Если так, почему бы не использовать пользовательское ограничение?В вашем routes.rb:

class TokenConstraint
  def matches?(request)
    request.params[:token].present? # or other logic to check token
  end
end

MyApp::Application.routes.draw do
  put "/users/:id" => "users#update", :constraints => TokenConstraint.new
end

Надеюсь, это поможет.

1 голос
/ 16 января 2012

Параметр маршрута ограничения полезен для проверки синтаксиса, не более.

В вашем случае вы можете поместить before_filter в контроллер приложения или на определенный контроллер.

В application_controller.rb:

before_filter :check_token
.
.
.
def check_token
 .
 .
 if token_valid
   # do this
 else 
   # do this
   return false # to stop further processing by other controllers
 end
end
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...