我正在尝试使用Nokogiri和HTTparty来获取我在rails模型中生成的内容验证令牌。此元标记具有UUID,用户会将该标记粘贴到其index.html文件中以进行验证:
域名模型:
class Domain
include Mongoid::Document
field :name, type: String
field :url, type: String
field :active, type: Boolean, default: false
field :verification_token, type: String
belongs_to :user
before_create :generate_verification_token
protected
def generate_verification_token
self.verification_token = SecureRandom.hex(30)
end
end
域视图:
<h1><%= @domain.name %></h1>
<p><%= @domain.url %></p>
<% if !@domain.active? %>
<div class="alert alert-danger">
<strong>Oops!</strong> Your domain is not verified!.
</div>
<div class="lead">
Please add the following meta tag to your domain root url page
<pre><%= "<meta name='trackmetrics_verification' content='#{@domain.verification_token}'/>" %></pre>
</div>
<% end %>
<%= link_to "Edit", edit_domain_path(@domain), class: 'btn btn-success' %>
<%= link_to "New Domain", new_domain_path(@domain), class: 'btn btn-success' %>
<p><%= link_to "Back to List", domains_path %></p>
基本上,用户将包括
<meta name='trackmetrics_verification' content='21bd47859ea549244e66a4582e99068fe0bc2063d6276a4426c2c3bb2e15'/>
在他们的根网址页面(index.html)中我希望有一个Verification Controller来检查用户是否在该页面中实际包含了元标记..如果他们这样做,他们的域名将被标记为True。
我的验证控制器:
class VerificationController < ApplicationController
require 'nokogiri'
require 'httparty'
def index
@domain = Domain.find(params[:Domain_id])
@doc = Nokogiri::HTML(HTTParty.get(@domain.url))
end
end
我的问题是如何抓住
<meta name='trackmetrics_verification' content='21bd47859ea549244e66a4582e99068fe0bc2063d6276a4426c2c3bb2e15'/>
使用Nokogiri寻找trackmetrics_verification metaname?
会不会像
def index
@domain = Domain.find(params[:Domain_id])
@doc = Nokogiri::HTML(HTTParty.get(@domain.url))
if @doc.xpath("//meta[@name ="trackmetrics_verification"]")
@domain.active = true
flash[:notice] = "Your domain has been verified!"
else
flash[:error] = "Incorrect verification"
end
end
答案 0 :(得分:3)
您使用的XPath //meta[@name ="trackmetrics_verification"]
将返回meta
属性name
的所有trackmetrics_verification
个元素节点(可能只有一个此类节点) )。您需要此节点的content
属性。获得它的一种方法是扩展查询以指定属性:
//meta[@name ="trackmetrics_verification"]/@content
使用Nokogiri,使用at_xpath
,因为您只需要一个匹配的节点,您可以使用text
方法获取属性节点的值:
@doc.at_xpath('//meta[@name ="trackmetrics_verification"]/@content').text
Nokogiri的另一种选择是选择meta
节点并使用[]
method获取属性的值:
@doc.at_xpath('//meta[@name ="trackmetrics_verification"])['content']