2011-04-23 48 views
0

Rails 3中的其他帐户管理页面如何适合RESTful设计?Rails 3中的RESTful设计中的杂项帐户管理页面

例如,用户注册(创建动作),然后转发到注册成功页面(?动作),现在要求他们通过带有令牌的URL(通过电子邮件发送给他们)验证其电子邮件地址。

当他们点击电子邮件中的链接时,技术上他们正在更新他们的账户,作为验证过程的一部分吗?所以我认为这会以某种方式映射到“更新”操作,但更新操作期待PUT请求。那是对的吗?你如何通过电子邮件完成这项工作?

我也想知道如何忘记密码,重置密码等也适合于一个RESTful设计?试图把我的头围绕着这个。

回答

1

仅仅因为你有一个结果设计,并不意味着你必须限制自己只能将1:1映射到Get/Post/Put/Delete的CRUD动词。也就是说,如果你想得到真的 RESTful,你可以开始考虑一些这些东西,作为他们自己的资源。例如用户验证:

  • 用户注册,并得到发送的验证邮件,你已经拥有了所有的平方离REST风格,它看起来像
  • 验证网址看起来像:http://app.com/user_verifications/new?token=foobar(GET)
  • 他们跟随该网址,也许会出现一个“你好丹,欢迎回来!点击这里验证你的帐户”在那一点上,你提交一个表格到http://app.com/user_verifications触发创建行动。现在在后端,您可以执行任何您想要的操作,更新用户,将其设置为活动状态,或实际创建“UserVerification”模型。

不是一个完美的例子,但这个想法是,你所提供的RESTful接口有一个额外的资源,在这种情况下,“user_verifications”和一个用户后,它通过HTTP方法,以实现用户的目标行事。您可以使用类似的逻辑来重置/忘记密码,或者使用“UserSession”类型资源,或者甚至具体指定为“ForgotPassword”特定资源。

+0

非常感谢您的回复。这就说得通了。我猜这个问题会变成你愿意跳过多少环节以实现适当的“RESTful-ness”。作为一个侧面的问题,你是否发现自己放弃了一种REStful方法,赞成在控制器中定义一个新的动作并保持简单? – Dan 2011-04-24 00:02:18

+0

你开始感觉它,例如forget_password是我的SessionsController中的另一个动作,url是/ session/forgot_password。不完全安宁,但也是一个严重的罪。为了让你的应用100%RESTul在所有情况下都是很多工作,而且我没有看到它提供了很多回报,所以我不会做大量的箍跳以支持边缘案例在这里和那里。使用你最好的判断,保持你真实的公众面对的API清洁和RESTful,并且不要太过于自己,如果你的其他非API路线不是100%的。 – ctcherry 2011-04-24 00:10:40

+0

再次感谢。这非常符合我在想如何处理这个问题的思路。我感谢帮助! – Dan 2011-04-24 00:22:48

0
  1. 成功页面只是create.html.erb文件。通常你从创建动作重定向,但在这里你可以呈现成功模板。

  2. 验证。如果您想保留REST,您应该再添加一个步骤:GET验证,存在令牌的窗体在哪里,这将导致PUT update操作。用户收到此页面的链接。

    但我更喜欢在这里使用简单的GET请求,它会在没有任何额外点击的情况下更新信息。

  3. 与恢复密码和其他功能的工作方式相同。您添加一个页面以获取电子邮件的表单,然后您发送一封带有链接的信函,其中包含带有令牌的表单等等。

+0

感谢您的帮助fl00r。欣赏回应。 – Dan 2011-04-24 00:23:39