3

在我的 Rails 应用程序(使用设计身份验证)中,任何人都可以开始创建帖子,但如果在点击保存/创建/发布时未登录,他们首先必须创建用户名或登录 = 完美。

我的代码:

 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 是无状态的——发布参数(以及所有其他参数)仅对一个请求有效。基本上,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 回答