【问题标题】:Authenticate devise user from email通过电子邮件验证设计用户
【发布时间】:2011-06-08 03:42:48
【问题描述】:

我正在使用 rails 3 并进行设计。我想在以下工作流程中进行构建。

  1. 在需要管理员批准的网站上提交文章。
  2. 网站向网站管理员发送一封电子邮件,其中包含指向管理员可以查看编辑和批准文章的页面的链接

我已经实现了这一点,但是,如果管理员当前没有登录到站点,管理员会因为未通过身份验证而被退回到根路径。

电子邮件中发送的链接是否可以作为特定管理员的身份验证?

【问题讨论】:

  • 这是否意味着任何关注该链接的人都被认证为管理员?!
  • 是的,但是该链接仅发送给授权人员,并且该链接可能会在一段时间后过期...我知道这不是最安全的方法,但这是一个博客正在谈论,而不是高度敏感的东西。

标签: ruby-on-rails email devise


【解决方案1】:

您想研究用于设计的令牌身份验证。这允许您使用一次性密钥通过 URL 参数授权用户访问。

在此处查看更多信息。 http://zyphmartin.com/blog/simple-auth-token-example-with-devise

您也可以简单地为每个资源创建一个身份验证令牌并将身份验证值存储在数据库中。当您转到资源的批准 URL 时,传入资源 ID 和身份验证令牌。这比以管理员身份登录用户更安全。

如果您需要更多帮助,请告诉我。

【讨论】:

    【解决方案2】:

    您可以将其实现为自定义控制器操作。

    您可以通过在 :before_filter 调用中添加 :except => :custom_action 密钥来关闭控制器中给定操作的设计身份验证。

    您可以在链接中包含一个带有 article_id 和 admin_id 的查询字符串。然后在自定义控制器操作中,您将通过文章表中的一个额外字段检查这篇文章是否尚未经过审核。如果有,你可以保释。如果没有,那么您可以允许版主批准或不批准它,将已审核标志设置为 true 并感谢版主的工作。

    如果您想变得非常棘手,您可以使 URL 包含一个 MD5 哈希 id,您可以将其用作键而不是文章 id。您可以将其存储在文章模型的额外字段中。这将大大降低它在适度的短暂窗口期间被欺骗的可能性。

    伊恩。

    【讨论】:

    • 唯一没有解释的是如何让 Devise 继续下去 :)
    • 我想这就是我所说的自定义设计操作的意思,它被排除在您的身份验证架构之外。您还可以实现一个完全独立的控制器,它完全不在身份验证方案之外。
    【解决方案3】:

    您可以向控制器(这是您的 URL 指向的位置)添加一个操作,然后通过将其添加到您的控制器来将其从身份验证中排除:

    before_filter :authenticate_user!, :except => [:review_article]
    

    您可以在 URL 中包含某种键(例如 Ian 建议的文章的 MD5),并在 review_article 中检查。

    【讨论】:

      猜你喜欢
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 2017-06-24
      • 2018-08-15
      • 2023-03-26
      相关资源
      最近更新 更多