3

私のRailsアプリ(devise認証を使用)では、誰でも投稿の作成を開始できますが、保存/作成/投稿を押したときにサインインしていない場合は、最初にユーザー名またはログイン=完璧を作成する必要があります.

私のコード:

 before_filter :authenticate_user!, :except => [:show, :index, :new, :edit]

悲しいことに、サインインすると、インデックス ページにリダイレクトされるか、投稿に戻りますが、すべてが失われ、ユーザーは最初からやり直す必要があります。

リダイレクトを変更するにはどうすればよいですか? また、再度ログインした後に投稿が失われないようにするにはどうすればよいですか?

私はそれが何かと関係があることを知っています:

  def after_sign_up_path_for(resource)
  new_user_confirmation_path
  end
4

1 に答える 1

1

HTTP はステートレスです。postパラメーター (および他のすべてのパラメーター) は、1 つの要求に対してのみ有効です。基本的に、リダイレクト前に送信されたパラメータを http が知る方法はありません。

ここでセッションが役に立ちます。コントローラーでこのようなことを行うと、両方の問題を解決できます。

before_filter :authenticate_user!, :except => [:show, :index, :new, :edit, :create]
# include create action inside except hash

def create
  if !user_signed_in? # check whether user is logged in manually
    session[:post] = params[:post] # assign post data to session if not
    redirect_to new_user_session_path
  else
    # ...
  end
end

そのセッションでは、セッション ハッシュが複数のリクエストで (破棄するまで) 利用できるため、http は「ステートフル」になります。

次に、ユーザーがログインしたら、フォーム内のセッションを使用してフォーム フィールドに事前入力します。

于 2013-03-30T21:57:09.917 に答える