5

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

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

4

2 回答 2

8

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

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

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

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

更新: 在您的整个应用程序中,您可以决定仅在用户登录时使用此信息。您可以定义before_filter获取当前用户的 a,并且仅当有实际用户登录时,您才使用配置文件数据:

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

在控制器动作的某处:

if current_profile
  # Do stuff with current_profile
  # Only available to registered users...
end

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

于 2009-05-27T21:46:27.140 回答
2

识别用户的唯一方法是使用 cookie。您使用的网站可能正在做的事情是:

第一次用户在“用户”表中创建一个条目并将他们添加到“客人”组中。将标识符 cookie 保存到用户计算机,以便您以后可以再次查找它们。

如果用户决定注册,您可以在用户表中填写他们的其余详细信息(您甚至可能希望有一个单独的表用于用户详细信息和注册详细信息,如用户名/密码等......)并将它们添加到已注册用户组。

您管理组的方式可以像数据库中的标志一样简单。

因为这是一个rails问题......

我可能会在 application_controller.rb 的 before_filter 中处理大部分内容。这些步骤将类似于:

if has_cookie
   @user = lookup_user
else
   @user = create_new_guest_user
end

您可以很容易地扩展现有的身份验证框架之一,例如acts_as_authenticated 或clearance 来执行此操作。

于 2009-05-27T21:47:01.600 回答