【问题标题】:Misc account management pages in a RESTful design in Rails 3Rails 3 中 RESTful 设计中的其他帐户管理页面
【发布时间】:2011-04-24 07:57:57
【问题描述】:

在 Rails 3 中,杂项帐户管理页面如何适应 RESTful 设计?

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

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

我还想知道忘记密码、重置密码等如何也适合 RESTful 设计?只是想解决这个问题。

【问题讨论】:

    标签: ruby-on-rails rest account-management


    【解决方案1】:

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

    • 用户注册,并收到一封验证电子邮件,你已经把这一切都摆平了,看起来就像 REST 一样
    • 验证网址如下:http://app.com/user_verifications/new?token=foobar (GET)
    • 他们跟随 url,可能会看到“Hello Dan,欢迎回来!单击此处验证您的帐户”,此时您向 http://app.com/user_verifications 提交表单以触发那里的创建操作。现在在后端,您可以执行任何您想要的操作,更新用户、将其设置为活动状态或实际创建“UserVerification”模型。

    不是一个完美的例子,但想法是您提供的 RESTful 接口具有额外的资源,在本例中为“user_verifications”,并且用户通过 HTTP 方法对其进行操作以实现用户的目标。您可以使用“UserSession”类型的资源或什至与特定的“ForgotPassword”资源一样具体地应用类似的逻辑来重置/忘记密码。

    【讨论】:

    • 非常感谢您的回复。那讲得通。我想问题变成了你愿意跳过多少圈来实现适当的“RESTful-ness”。作为一个附带问题,您是否发现自己放弃了 RESTful 方法,转而只在控制器中定义新操作并保持简单?
    • 你开始对它产生一种感觉,例如 forgot_password 是我的 SessionsController 中的另一个操作,url 是 /session/forgot_password。不完全是安宁,但也是一种严重的罪过。让你的应用在所有情况下都是 100% RESTul 需要做很多工作,而且我认为它不会提供很多回报,所以我不会为了支持边缘情况而做大量的跳圈.使用你的最佳判断,保持你真正面向公众的 API 干净和 RESTful,如果你的其他一些非 API 路由不是 100% 存在,不要对自己太苛刻。
    • 再次感谢。这非常符合我对如何解决这个问题的想法。感谢您的帮助!
    【解决方案2】:
    1. 成功页面只是create.html.erb 文件。通常你是从创建动作重定向,但在这里你可以只渲染成功模板。

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

      但我更喜欢在这里使用简单的 GET 请求,无需任何额外的点击即可更新信息。

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

    【讨论】:

    • 感谢 fl00r 的帮助。感谢您的回复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 2014-01-30
    相关资源
    最近更新 更多