实现忘记密码功能的最佳方式是什么?
问题描述:
我有以下宁静的结构:实现忘记密码功能的最佳方式是什么?
- 我的登录页面使用会话/新动作
- 我的注册页面的用户/新动作
- 我登出页面使用会话/销毁行动
- 我的注册过程使用的用户/创建行动
我需要3个动作为:
- 我忘记了密码页面
- 开始忘记密码的动作(发送电子邮件)
- 重置密码,基于令牌
在哪里这些3个行动适合在一个宁静的世界?
澄清:
我知道我可以创建我的现有会话和用户控制器的任何操作(例如,reset_password得到动作或start_reset_password后动作),它只是没有真正坐下吧,看来我我试图让这些控制器做太多的工作。
答
forgotten_passwords电子邮件我对这个设计非常满意。我认为它需要一个新的控制器。
我结束了创建一个名为forgotten_passwords新的控制器,以控制过程
- forgotten_passwords - 新:地图,我忘记了密码页面
- forgotten_passwords - 创建:地图开始忘记密码的动作(发送映射到进程的结束(用户看到她的新密码的网页)
我:节目 - 与令牌)
答
REST不是黑魔法。找出你的技术目标是什么,然后选择正确的动词与他们一起去。
我忘了我的密码页面:本质上是一个静态表单,对吗?你希望这是可以缓存的。获取您想要的任何网址。
发送电子邮件:您不希望重复的昂贵操作,并且您希望每次用户请求时都执行该操作:POST或PUT放在您想要的任何URL上。哎呀,如果你愿意的话,你可以把它和上面的URL一样,但我没有看到特别迫切的需要。
重置基于令牌的密码:我会考虑实现这个作为登录通过令牌,而不是如果你要这样做,那么它有服务器端的后果,因此应该可能是一个POST或PUT。
+0
我想在你的控制器上有什么动作和动作会发生争执,你需要这些动作和动作才能完成任务,保持你的控制器简单,只有魔法7动词。 – 2009-07-13 02:39:17
这有点荒谬。忘记密码检索功能更适合RPC,而不适用于REST。所以不要太担心这个问题。 – aehlke 2009-07-20 18:03:41