0

私はユーザー認証用のコントローラーアクションを開発しようとしているので、次のようなことができます。

class PostsController < ApplicationController
  before_filter :authenticate_user!
...

ユーザーが認証された後、前のページにリダイレクトする認証アクションがあります。この問題を解決するためのストアとリダイレクトのアプローチがあることを私は知っています。ただし、これは、GET以外のアクション、つまり投稿の削除を必要とするものには機能しません。

このメソッドを使用して別のコントローラーからPOSTアクションを呼び出すことを含むRails2のソリューションを見つけました。controller.processただし、これはRails3では非推奨です。Rails 3に同等の方法はありますか?controller.processそもそも古いコマンドに関するドキュメントがあまり見つかりません。

誰かが別のアプローチの提案を持っているなら、それもありがたいです。

4

2 に答える 2

2

Rails 3でも同じ問題があり、controller.processは廃止されています。以下は、Rack::MethodOverride を controller.process の代わりに使用しようとして失敗したものです (これは Rails 2 で機能していました)。以下の ro.call からのエラーは次のとおりです。

ユーザー セッションの ThreadErrorController#create スレッド 0xb592b994 が自分自身に参加しようとしました

デフデモ

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 を正しく使用して投稿リクエストを送信する方法を知っている人はいますか?

于 2011-05-19T14:58:26.617 に答える
1

セッションでユーザーがリダイレクトされた URL と一緒にメソッドを保存し、後でそれを偽造することができます。ただし、Rack ミドルウェア レベルで行う必要があります。たとえば、lib/rack/methodoverride.rb の Rack::MethodOverride を確認します。

于 2011-05-02T22:32:39.147 に答える