我的会话控制器中有omniauth_create
个动作。它会将用户重定向到名为 enter_email.html.erb 的视图,并将一些params
传递给重定向(从omniauth获取):
def omniauth_create
auth = request.env["omniauth.auth"]
user = User.from_omniauth(env["omniauth.auth"])
.
.
.
else
redirect_to(enter_email_path(oprovider: user.provider,
ouid: user.uid,
oname: user.name,
opassword: user.password,
opassword_confirmation: user.password))
end
end
在隐藏字段中使用它们(基本上是注册表单):
<%= form_for(@user) do |f| %>
<%= render 'shared/error_messages', object: f.object %>
<%= f.label :email %>
<%= f.text_field :email %>
<%= f.hidden_field :provider, value: params[:oprovider] %>
<%= f.hidden_field :provider, value: params[:oprovider] %>
<%= f.hidden_field :uid, value: params[:ouid] %>
<%= f.hidden_field :name, value: params[:oname] %>
<%= f.hidden_field :password , value: params[:opassword] %>
<%= f.hidden_field :password_confirmation, value: params[:opassword_confirmation] %>
<% # To know to which form to redirect in case of validation error %>
<%= hidden_field_tag 'form_name', 'enter_email' %>
<%= f.submit "Create my account", class: "btn btn-large btn-primary" %>
<% end %>
现在的问题是,当出现验证错误时(例如已经收到电子邮件)。视图呈现enter_email
,params
从隐藏字段(从值)中消失。
所以我考虑将数据存储在会话中而不是用redirect_to
传递它我从未使用过这种方式的会话,所以我有点迷失(我是如果我在会话中存储数据,我甚至不确定是否仍然需要隐藏字段?)
任何人都可以给我一个提示或示例吗?