首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >区分同一用户模型的多个注册页

区分同一用户模型的多个注册页
EN

Stack Overflow用户
提问于 2014-10-22 22:32:10
回答 2查看 127关注 0票数 1

我有一个相当普通的注册系统,我的Rails 4应用程序,我想添加一个奇怪的功能。我希望提供多个注册表单,并秘密地为新用户对象设置一个值,该值是根据该页面提交数据的。

出于安全原因,我目前的做法是不好的。它可以正常工作,但精明的用户可以使用浏览器的开发工具来更改隐藏字段的值,并表明它们来自不同的页面。

routes.rb

代码语言:javascript
复制
get '/signup', to: 'users#new'
get '/red-signup',  to: 'users#new', color: 'red'
get '/blue-signup',  to: 'users#new', color: 'blue'

users_controller.rb

代码语言:javascript
复制
def new
  @user = User.new
  @color = params[:color] || 'grey'  # default of grey
end

users/new.html.erb

代码语言:javascript
复制
<%= form_for(@user) do |f| %>
  ...
  <%= f.hidden_field :color, value: @color %>   # VULNERABLE TO TAMPERING
  <%= f.submit "Create my account" %>
<% end %>

所以,我想要一种防篡改的方法来区分来自不同页面的新注册。我认为这意味着将任何有意义的标记都排除在表单数据之外。

对探索的方法有什么建议吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-23 12:25:52

如果您的目标是在newcreate操作之间安全地传递new值,则可以为此目的使用会话。在new操作中设置颜色:

代码语言:javascript
复制
def new
  @user = User.new
  session[:color] = params[:color] || 'grey'  # default of grey
end

然后在create操作中,您可以检索它:

代码语言:javascript
复制
def create
  @color = session[:color]  
end

Rails会话数据在默认情况下存储在Cookies中,并通过加密签名使其具有抗篡改性。它也是加密的,所以任何访问它的人都不能读取它的内容。

票数 0
EN

Stack Overflow用户

发布于 2014-10-22 23:43:03

最终目的是什么?

如果要知道哪种注册表单的转换率更高,那么您正在重新发明轮子,您应该看看A/B测试那些宝石是否做对了。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26518257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档