Rails 3 эквивалент для controller.process (создание бесшовной аутентификации пользователя) - PullRequest
0 голосов
/ 29 апреля 2011

Я пытался разработать действие контроллера для аутентификации пользователя, чтобы я мог сделать что-то вроде этого:

class PostsController < ApplicationController
  before_filter :authenticate_user!
...

и иметь действие аутентификации, которое перенаправляет обратно на предыдущую страницу после аутентификации пользователя. Я знаю, что существуют способы хранения и перенаправления для решения этой проблемы. Однако это не работает для всего, что требует не-GET действия, то есть удаления сообщения.

Я нашел решение для Rails 2 , которое включает использование метода controller.process для вызова действия POST из другого контроллера. Это устарело в Rails 3, хотя. Есть ли какой-то эквивалентный метод в Rails 3? Я не могу найти много документации по старой команде controller.process для начала.

Если у кого-то есть предложение для другого подхода, это также будет оценено.

Ответы [ 2 ]

2 голосов
/ 19 мая 2011

У меня та же проблема в Rails 3 с устаревшим controller.process. Ниже моя неудачная попытка использовать Rack :: MethodOverride вместо controller.process (который работал для меня в Rails 2). Ошибка из ro.call ниже:

ThreadError в пользовательских сессияхController # create нить 0xb592b994 пыталась присоединиться

def demo

params = {'action' => 'create', 'controller' => 'user_sessions', 
        "commit"=>"Submit", "user_session"=>{"username"=>"demo", "password"=>"demo"}}

request.env['REQUEST_METHOD'] = 'POST'

# Throw out existing params and merge the stored ones
request.parameters.reject! { true }
request.parameters.merge!(params)

request.path_parameters.reject! { true }
request.path_parameters.merge!('action' => 'create', 'controller' => 'user_sessions')

request.POST["HTTP_X_HTTP_METHOD_OVERRIDE"] = 'POST'
ro = Rack::MethodOverride.new Rails.application
ro.call request.env
if response.redirected_to
  @performed_redirect = true
else
  @performed_render = true
end

конец

Может кто-нибудь знает, как правильно использовать Rack :: MethodOverride для отправки запроса на публикацию?

1 голос
/ 03 мая 2011

Вы можете сохранить метод вместе с URL-адресом, с которого пользователь был перенаправлен в сеансе, а затем подделать его позже. Вы должны будете сделать это на уровне промежуточного программного обеспечения Rack. Например, проверьте Rack :: MethodOverride в lib / rack / metadoverride.rb.

...