gpt4 book ai didi

ruby-on-rails - 在 Rails 中验证网站所有权

转载 作者:行者123 更新时间:2023-12-03 15:45:12 25 4
gpt4 key购买 nike

有关类似主题的最近讨论,请查看 this问出来。

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

假设你有这个模型:

class User < ActiveRecord::Base
has_many :websites
end

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

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

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

你会怎么做?

最佳答案

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

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

模型:

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 = !@dns.empty? && @dns.first.name.to_s == YOUR_DOMAIN
end
end

end

Controller
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 }

我将把实现这些 View 作为练习留给你。

关于ruby-on-rails - 在 Rails 中验证网站所有权,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1842416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com