2017-03-17 45 views
0

モーダル内に表示されたフォームでインデックスページを作成しようとしています。フォームはJSとしてPOSTアクションで提出された後、私の問題は、これは以下の説明ActionController :: GETでリダイレクトするInvalidCrossOriginRequest

セキュリティが強化されたエラーを与えるということである。この

def create 
    @output = Output.new(output_params) 

    respond_to do |format| 
    if @output.save 
     format.html { redirect_to @output, notice: 'Output was successfully created.' } 
     format.json { render :show, status: :created, location: @output } 
     format.js { redirect_to production_line_path @output.machine.production_line, machine_id: @output.machine_id, format: :js } 
    else 
     format.html { render :new } 
     format.json { render json: @output.errors, status: :unprocessable_entity } 
    end 
    end 
end 

などのJSとしてもredirect_toアクション#indexで応答#createアクションをトリガー警告:埋め込まれた<script>タグが別のサイトにあり、保護されたJavaScriptが必要です。あなたが何をしているのか分かっているならば、先に進んでこのアクションの偽造防止を無効にして、クロスオリジンJavaScriptの埋め込みを許可してください。 35ミリ秒で

完成した422処理不能エンティティ。(再生回数:27.2ms | ActiveRecordの:は1.5ms)

ActionController :: InvalidCrossOriginRequest(セキュリティ警告:あなたは何を知っている場合は、別のサイトに埋め込まれた<script>タグはJavaScriptを保護要求さ」クロスメディアのJavaScript埋め込みを許可するためにこのアクションで偽造防止を無効にしてください。):

これを間違った方法で実行しようとしているのかどうかはわかりません。 JSがリダイレクトされないようにレスポンスを変更する必要がありますか?同じコントローラーアクションからレンダリングする#create

+1

なぜJSファイルをレンダリングするのではなく、 'format.js'でリダイレクトしていますか? – emaillenin

+0

@emayenenin - 私が書いたように、これが正しい方法であるかどうかはわかりません。最初は、私が表示したいモデルのコントローラーから呼び出されたアクションをレンダリングする必要があると思いました。 – adass

答えて

1

組み込みのredirect_toを使用してパスとparamsを渡すことも、JSを使用してリダイレクトすることもできます。あなたがリダイレクトしたい場合は次の操作を行います。

render js: "window.location.pathname = #{production_line_path @output.machine.production_line, machine_id: @output.machine_id}" 
0

は私がInvalidCrossOriginRequest、エラーの原因となったものを発見したと思います。誤って私のフォームは、通常はUJS Railsアダプタによって自動的に追加されるトークンなしでJSリクエストとして送信されましたが、もしそれが使用されているとします。

私のフォームにはremote: trueがありませんでしたが、代わりにformat: :jsが含まれていました。私はUJS Railsアダプタを使用していて、私のPOSTリクエストはCSRF保護のために必要なトークンであると思いました。 More on Cross-Site Request Forgery (CSRF)

関連する問題