HTML リダイレクトで POST できないことは理解していますが、私の状況では、ユーザーの認証後にアクションを作成するためにリダイレクトする必要があります。この制限を回避する方法を知りたい:
特に、ユーザーが Omniauth を使用してログインせずに投稿に記入できるようにしたいと考えています。AJAX 呼び出しを使用して、投稿を session[:post] に保存します。次に、ユーザーは omniauth を使用してログインし、投稿を永続化できます。
最初の ajax 呼び出しを処理する create アクションを備えた PostsController があり、ユーザー認証後に html リクエストも処理します。
def create
@post = Post.new(params[:post])
respond_to do |format|
format.html{
if @post.save
redirect_to @post, notice: 'Post was successfully created.'
else
render action: "new"
end
}
format.json {
if session[:post] = @post
render json: @post, status: :created, location: @post
else
render json: @post.errors, status: :unprocessable_entity
end
}
end
end
end
次に、Facebook からのコールバックを処理するコントローラーで、次のようにします。
class ServicesController < ApplicationController
def create
... authentication logic here ...
sign_in(:user, service.user)
redirect_to :controller => "posts", :action =>"create"
end
method_alias: :facebook, :create
ただし、「作成」アクションにリダイレクトできないため、これは機能しません。どうすればこのタスクを達成できますか?