【问题标题】:Does this "invite friends" system for my website sound flawed to you?我的网站的这个“邀请朋友”系统听起来有缺陷吗?
【发布时间】:2010-12-29 15:13:16
【问题描述】:

我想要一个系统,让我的用户可以邀请他们的朋友。我们不希望在发送邀请链接时使用 URL 缩短器,但链接相对较短也很重要。我认为实现这一点的最佳方法是为每个用户提供一个“个人资料用户名”,如“tonyamoyal12”,并让他们根据需要请求一个新的唯一用户名。

当我的用户发送邀请时,它会发送一个类似http://mydomain/invite/profile_username 的 URL,基本上,如果受邀者在该 URL 上登录,邀请者就会获得信用。谁能想到这种方法的缺点?大多数邀请 URL 都有哈希来验证邀请的完整性,但我认为我的方法很好。

更新 个人资料用户名是 INVITER 而非 INVITEE 的用户名。因此,用户在 INVITER 的个人资料页面上进行了注册,因此邀请者会因为有人在他的页面上注册而获得“积分”。

谢谢!

【问题讨论】:

  • 会员只能通过邀请才能注册吗?
  • 不,任何人都可以注册。好问题
  • 当用户名中包含“?”、“_”或“/”时会发生什么?
  • 它不会...为什么下划线是个问题?

标签: web-services invite


【解决方案1】:

如果我正确理解该设置,现有用户通过提供他们朋友的电子邮件来创建邀请,您的系统将使用 [inviteUrl]/[inveter'sUserName] 向其发送邮件。 因此,如果我发送邮件邀请您,则 url 将是:

www.yourThang.com/invite/borisCallens

每次有人访问我(用户 borisCallens)都会得到一分。 什么会阻止我访问这个网址无数次,从而赢得邀请你的朋友游戏?

【讨论】:

  • 由于我无法跟踪此方案下的每个邀请,因此人们不会因为简单地访问这些 URL 而获得积分。他们在访问这些 URL 后获得注册积分。在“如果被邀请者在该 URL 登录,邀请者获得信用”问题中说明了这一点
【解决方案2】:

在这些类型的系统中,您通常不会在被邀请者实际注册之前分配任何用户数据(即用户名),并且根据具体情况,让这种 URL 正常工作可能会有点麻烦您正在使用的框架。

流程正常:

  1. 邀请用户,用户会向他们发送电子邮件。
  2. 受邀者点击电子邮件中的链接进入网站的主注册页面。
  3. 受邀者使用他们选择的有效用户名进行注册,并且基于一些唯一的随机密钥(包含在点击链接中),您可以对所涉及的两个用户执行您的业务逻辑(添加到朋友列表等)。

生成您自己的用户名的缺点是它们比随机数更容易被猜到,因为您可能会在其中使用英文单词。如果您生成并分配随机用户名(即“s243k2ldk8sdl”),受邀者将不会高兴,因为他们必须做额外的工作来更改用户名,或者以某种方式记住该名称。

编辑,因为我不太明白这个问题。

我认为这个方案很好,除了我只会在 URL 中使用邀请者的用户名,并且不允许他们更改它(为什么允许它?)。唯一的问题是,如果对邀请的数量有某种限制(或者每个邀请都有奖励),您希望使用某种仅对邀请者有效的唯一哈希值来保护每次点击网址。

编辑 2

由于系统中的用户没有分配用户名,您可以选择任何一种方式。允许以先到先得的方式分配“用户名”会很好,因为这样可以让每个人更容易地与朋友分享他们的 URL,因为它很容易记住并且可以简单地输入。但是,如果注册需要一个唯一的密钥...在这种情况下,不实现用户名并将每个人引导到某种单一的注册页面会更简单。

【讨论】:

  • 邀请者没有用户名。我必须为他们生成它。人们只使用 openID 登录,所以我不使用用户名唯一标识。但本质上这将意味着我正在这样做
  • 你的问题没有这么说,所以我假设有用户名。我会更新我的答案。
【解决方案3】:

您可以为每个邀请创建一个唯一的散列,并保持散列与用户名的关联。这将需要一些存储开销,但您可以通过邀请过期来帮助解决这个问题。

所以http://mydomain/invite/RgetSqtu 将是一个示例链接,其中包含一个存储 RgetSqtu/profile 直到被使用的 DB 表。

如果找不到哈希,您可能希望提供一个有用的错误页面,如下所示:

很抱歉,找不到您输入的邀请。这可能是由于邀请输入不正确、已被使用或太旧(邀请在 3 天后过期)造成的。

【讨论】:

    【解决方案4】:

    如果网站很大,您会遇到名称冲突,并且您将依赖邀请者输入被邀请者的姓名,而他们可能做得不好。

    如果你想这样做,那么你将不得不处理名称冲突。

    也有可能有人会出现并决定随机输入名称以查看他们是否被击中。假设我想多管闲事并监视朋友,看看他们是否正在向其他朋友发送邀请。

    编辑:嗯,好的。好吧,如果他们只是单击链接转到邀请者,那不是问题。这看起来很正常,暴露的用户名也不是什么秘密。

    【讨论】:

    • 不确定我是否遵循这个。邀请页面将与主页相同,除了登录邀请页面的人将归功于他们登录的邀请页面。也许重读这个问题?我认为你错过了重点
    • 但是...您对名称冲突是正确的,但这是我理解的。
    【解决方案5】:

    我建议在查询字符串中传递邀请者的用户名,并让该查询字符串在新用户注册页面上填充可编辑或不可编辑的文本框。这样一来,您仍然只有一个注册页面,URL 很短,并且用户可以通过推荐朋友获得信用。

    http://mydomain/invite/register.html?inviter=invitersUsername

    导致

    名字:_________
    姓氏:_________
    推荐人:invitersUsername

    【讨论】:

    • 我打算照你说的做,但使用上面的方案。这是一种 REST 方法
    【解决方案6】:
    1. 您无法独立跟踪邀请。在某些时候,您可能想知道用户发出了多少邀请与接受了多少。使用这个单一的 URL 系统,您无法跟踪该信息。

    2. 机器人很容易被写入垃圾邮件这样的系统。 (可能在结果页面上使用验证码解决)

    【讨论】:

    • 人们已经破坏了它出现的验证码。
    • 我要求人们在被“邀请”后注册,所以机器人必须注册
    【解决方案7】:

    为什么不直接创建您自己的定制 URL 缩短?

    如果您避免 URL 缩短的原因是您不想依赖外部公司,那么这对您来说可能是一个很好的解决方案。

    【讨论】:

    • 并不是说工作量很大,但是对于这个特定的项目,我现在宁愿使用开箱即用的 Rails 插件。知道任何网址缩短宝石吗?
    • 有一个有趣的项目,名为 yourls.org,用 php 编写,可让您运行自己的 URL 缩短服务。
    • 哦,没看到你在 Rails 上使用 ruby​​。 yourls.org 仍然有一个 api。
    • yourls.org 非常酷。我一定会考虑的。但这并不能真正解决我的问题是我的方法有什么问题
    猜你喜欢
    • 2011-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多