验证 Rails 中的网站所有权

2023-12-14

有关类似主题的最新讨论,请检查this问题出来了。

验证特定用户是否拥有网站所有权的最佳方法是什么?

假设您有这个模型:

class User < ActiveRecord::Base
   has_many :websites
end

为了确保用户确实拥有该网站,我考虑进行电子邮件验证。示例:用户将 example.com 列为其网站,并发送电子邮件至[电子邮件受保护]。如果用户从 example.com 发送响应消息,则该网站是有效的。

问题是,如果有一个网站,一大群人可以从具有该域名的网站(例如 gmail.com)发送电子邮件。我不希望用户将 Gmail 注册为他们的个人网站。

因此,最好的方法似乎是让用户在 HTML 中嵌入一些代码,并且 Rails 应用程序确保该代码在那里。

你会怎样做呢?


这就是您如何使用 RESTful 风格的 google 子域方法来验证域。您将允许用户创建站点记录,该记录将保持未验证状态,直到用户稍后单击链接/按钮来验证域(以允许 DNS 传播)。

此代码未经测试,但可以帮助您入门。

Model:

class Site < ActiveRecord::Base
  # schema
  # create_table "sites", :force => true do |t|
  #  t.string   "domain"
  #  t.string   "cname"
  #  t.integer  "user_id"
  #  t.boolean  "verified"
  #  t.datetime "created_at"
  #  t.datetime "updated_at"
  # end

  require "resolv"

  YOUR_DOMAIN = "example.com"

  belongs_to :user
  before_create :generate_cname

  attr_accessible :domain
  …

  # Validate unless already validated
  def validate!
    validate_cname unless self.verifed == true
  end

  protected

  # Generate a random string for cname
  def generate_cname
    chars = ('a'..'z').to_a
    self.cname = 10.times.collect { chars[rand(chars.length)] }.join
  end

  # Sets verifed to true if there is a CNAME record matching the cname attr and it points to this site.
  def validate_cname
    Resolv::DNS.open do |domain|
      @dns = domain.getresources("#{cname}.#{domain}", Resolv::DNS::Resource::IN::CNAME)
     self.verified = [email protected]? && @dns.first.name.to_s == YOUR_DOMAIN
    end
  end

end

控制器

class SitesController < ActionController::Base
  # Usual RESTful controller actions
  # …

  def validate
    @site = current_user.sites.find(params[:id])
    @site.validate!

    respond_to do |format|
      if @site.save && @site.verified
        flash[:notice] = 'Site verified!'
        format.html { redirect_to(@site) }
        format.xml  { head :ok }
      else
        flash[:Error] = 'Site verification failed!'
        format.html { redirect_to(@site) }
        format.xml  { render :status => :unprocessable_entity }
      end
    end

  end
end

将其放入routes.rb中:

map.resources :sites, :member => { :validate => :put }

我将把实施这些观点作为您的练习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

验证 Rails 中的网站所有权 的相关文章

随机推荐

  • 如何在 MySQL 中使用命令行导入 SQL 文件?

    我有一个 sql导出的文件phpMyAdmin 我想使用命令行将其导入到不同的服务器中 我有一个Windows Server 2008R2安装 我把 sql文件上的C drive 我尝试了这个命令 database name lt file
  • 使用 C# 将 Word 文件(.docx 和 doc)转换为 .pdf 不起作用

    我正在使用 Visualstudio 2010 我正在尝试将 word docx 文件转换为 pdf 文件 并且在本地工作正常 但在服务器上运行时显示错误为 Could not load file or assembly office Ve
  • WooCommerce 价格覆盖不起作用

    我已经使用设置了一个隐藏的输入项woocommerce before add to cart button hook function add gift wrap field gt
  • 在R闪亮的页面加载时调用javascript函数

    我添加了对 css 和 javascript 文件的引用 如下所示 tags link rel stylesheet type text css href rtp css tags script type text javascript s
  • QOpenGLWidget更新如何不会导致paintGL事件?

    我正在记录呼叫update and paintGL 但不知何故 只发生更新 PaintGL 被调用了几次 然后就再也没有调用过 这怎么可能 窗口是可见的并且isVisible 每次都返回 Trueupdate 叫做 具体来说 我从QGLWi
  • Ghub 脚本:向下拖动鼠标并按鼠标左键(LUA)自动点击

    所以基本上我试图使用 Ghub Lua 脚本机制来解释标题中的内容 发布下面我所拥有的代码 EnablePrimaryMouseButtonEvents true function OnEvent event arg if IsKeyLoc
  • java中的单词高亮显示

    我想针对特定的情况突出显示这些词time 就像卡拉 OK 应用程序一样 每个单词都有一个特定的突出显示时间 我可以计时 但不知道在哪里 如何在特定的持续时间内突出显示一个单词 在 stackoverflow 和 google 上搜索了很多
  • 在 Azure Function 中安装 Powershell 模块

    我将 Azure Function 2 0 与 Powershell 结合使用 并在安装 Powershell 模块时出现以下错误 有什么办法可以消除这个错误 一般来说 我们不需要管理员权限来安装 NuGet 依赖项 I also trie
  • Reactjs:意外的标记“<”错误

    我刚刚开始使用 Reactjs 正在编写一个简单的组件来显示 li标记并遇到此错误 意外的标记 我已将示例放在下面的 jsbin 中http jsbin com UWOquRA 1 edit html js 控制台 输出 请让我知道我做错了
  • 获取所有打开的 Excel 文档

    我需要使用自己的数据创建 xls 文件 但文件可能已被创建并由用户打开 1 如果文件不存在 新的应用程序类 工作簿 Add 另存为 2 如果文件存在且未打开 没问题 转到 1 3 如果文件存在并且被用户打开 需要找到它的工作簿并修改工作表的
  • PyQT:旋转 QLabel,使其定位在对角线上而不是水平定位

    我正在开发一个触摸屏应用程序 其中图形用户界面空间非常紧张 我想稍微旋转 QLabel 使其垂直或在对角线上稍微偏移 有什么建议么 我在 QLabel 界面上找不到任何相关内容 非常感谢 QLabel不这样做 但您可以轻松创建自己的包含一些
  • 使用 CSS3 过渡对不可设置动画的属性进行动画处理

    在我的应用程序中 我使用以下内容对页面上元素的不透明度进行动画处理 s transition property opacity transition duration 250ms 当然 有特定于供应商的版本 进而 s hidden opac
  • 标签是 XHTML 中的块级元素吗?

    我知道在HTML4 0中 p tag 不是块级元素 那么在 XHTML 1 0 中呢 谢谢 这是HTML4 0的参考http www w3 org TR html401 struct text html P 元素代表一个段落 它不能包含块级
  • 面向非美国开发者的 Paypal Android SDK

    我是一名非美国开发人员 正在构建一个也可以在美国境外运行的 Android 应用程序 我搜索了一段时间有关 Android SDK 何时在美国境外可用的信息 但没有找到任何信息 我正在寻找一种将 Paypal 支付与我的应用程序集成的方法
  • Unix 文件名中应限制哪些字符?

    考虑一个Save As带有自由文本条目的对话框 用户可以在其中输入文件名作为自由文本 然后单击Save按钮 然后 软件会验证文件名 如果名称有效则保存文件 在 Unix 文件系统上 验证中应应用哪些规则 以后在转义特殊字符等方面操作该名称并
  • 找不到管道“safeResourceUrl”

    由于我正在尝试将 YouTube 视频动态嵌入到我的 Angular 2 应用程序中 因此正在努力解决一些安全错误 在这里找到了关于使用 Pipe 来清理 url 的答案 但是遇到这个当前错误 找不到管道 safeResourceUrl S
  • Java加载二进制文件

    请告诉我最好 最快的方法 1 将非常小的二进制文件加载到内存中 例如图标 2 加载 读取大小为 512Mb 的非常大的二进制文件 也许我必须使用内存映射IO 3 当您不想考虑大小 速度而只需要做一件事时 您的常见选择 将所有字节读入内存 谢
  • 消除GOT寄存器的冗余负载?

    我正在处理一些在编译为 PIC 位置无关代码 时速度慢 70 80 的代码 并寻找缓解该问题的方法 问题的一个重要部分是 gcc 坚持在每个函数中插入以下内容 call i686 get pc thunk bx addl GLOBAL OF
  • SV 或 UVM 中的正则表达式

    我需要调用哪些函数才能在 Systemverilog UVM 中使用正则表达式 注意 我不是问如何使用正则表达式 只是问方法名称 首先 如果您想使用正则表达式 您需要确保您使用的是与其 DPI 代码一起编译的 UVM 库 即UVM NO D
  • 验证 Rails 中的网站所有权

    有关类似主题的最新讨论 请检查this问题出来了 验证特定用户是否拥有网站所有权的最佳方法是什么 假设您有这个模型 class User lt ActiveRecord Base has many websites end 为了确保用户确实