如何在Rails中实现这种逐步参与/懒惰注册?

San*_*ago 5 user-experience ruby-on-rails lazy-registration

很久以前我遇到了一个网站(我遗憾地丢失了地址,它是某种报纸网站),它让你可以像使用注册用户一样利用一切.您可以评价,收藏和评论文章,当您这样做时,它会显示一条谨慎的嵌入式消息,说明您必须在网站上注册才能保存您的贡献.然后它有链接让你看看你的个人资料如果你的样子会是什么样子,我很惊讶地看到它在那里有我所有的活动; 我阅读和保存的文章,评论等等.我离开了网站,当我以后出于好奇心回到它时,它仍然保存了我的活动.

我认为这是有史以来最伟大的事情,现在我正在建立一个具有社交功能的网站,我也想采取这种方法.但我仍然是一个菜鸟,所以我不知道如何去做.你会怎么做?

mol*_*olf 8

我会创建一个Profile模型,该模型是为访问您网站的任何用户自动创建的,并添加第一个收藏夹,评价第一个项目等.Profile应该保存到您的数据库中,包括一个适当的随机和唯一字符串.此字符串可以作为cookie存储在客户端,稍后将用于检索您的配置文件.它应该是随机的,足够长,以便您不能轻易篡改您的cookie并获取其他匿名用户的个人资料,但这并非完全可以避免(因此请注意,您不能在匿名配置文件中存储敏感数据!).

用户注册后,您可以将其Profile与新User记录关联,并删除co​​okie和唯一字符串标识符.您现在可以根据他们的记录在登录时简单地检索他们的个人资料User.

Profile模型可以包含您要存储的任何信息.

如果要区分注册用户和匿名用户,可以创建AnonymousProfile模型和Profile模型(每个模型具有不同的属性),并在有人注册时将所有数据从匿名配置文件复制到用户配置文件.

更新: 在整个应用程序中,您可以决定仅在用户登录时使用此信息.您可以定义一个before_filter抓取当前用户的权限,并且仅当有实际用户登录时,您是否使用配置文件数据:

class ApplicationController < ActionController::Base
  before_filter :fetch_user_data

  def fetch_user_data
    @current_user = ... # Work your magic to get current user
  end

  private

  def current_profile
    @current_user and @current_user.profile  # Use profile association
  end
end
Run Code Online (Sandbox Code Playgroud)

控制器动作中的某处:

if current_profile
  # Do stuff with current_profile
  # Only available to registered users...
end
Run Code Online (Sandbox Code Playgroud)

current_profile如果您改变主意并希望匿名配置文件对您的匿名用户生效,您可以稍后更改实施.