类:Mongo::Server::PendingConnection Private
- 继承:
-
ConnectionBase
- 对象
- ConnectionCommon
- ConnectionBase
- Mongo::Server::PendingConnection
- 扩展方式:
- 可转发
- 定义于:
- build/Ruby-driver-v 2.19 /lib/mongo/server/pending_connection.rb
Overview
此类是私有 API 的一部分。 应尽可能避免使用此类,因为它将来可能会被删除或更改。
该类封装握手和身份验证期间的连接。
常量摘要
从ConnectionBase继承的常量
ConnectionBase::DEFAULT_MAX_BSON_OBJECT_SIZE 、 ConnectionBase::MAX_BSON_COMMAND_OVERHEAD 、 ConnectionBase::REDUCED_MAX_BSON_SIZE
Loggable中包含的常量
实例属性摘要折叠
-
# ID ⇒ 整数
只读
private
连接的ID 。
从ConnectionBase继承的属性
#description 、 #options 、 #server
包含在Monitoring::Publishable 中的属性
从ConnectionCommon继承的属性
实例方法摘要折叠
- #handshake_and_authenticate! ⇒ 对象 private
-
#initialize (socket, 服务器, 监控, options = {}) ⇒ PendingConnection
构造函数
private
PendingConnection 的新实例。
从ConnectionBase继承的方法
#app_metadata 、 #dispatch 、 #Generation 、 #service_id
Monitoring::Publishable 中包含的方法
#publish_cmap_event 、 #publish_event 、 #publish_sdam_event
Loggable中包含的方法
#log_debug 、 #log_error 、 #log_ Fatal 、 #log_info 、 #log_warn 、 #logger
从ConnectionCommon继承的方法
#connected? , #handshake_command , #handshake_document
构造函数详情
#initialize (socket, 服务器, 监控, options = {}) ⇒ PendingConnection
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回 PendingConnection 的新实例。
27 28 29 30 31 32 33 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/pending_connection.rb', 第27行 def 初始化(套接字, server, 监控, = {}) @socket = 套接字 @options = @server = server @monitoring = 监控 @id = [:id] end |
实例属性详细信息
# ID =" Integer " (只读)
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
返回 连接的 ID。 这与创建此 PendingConnection 实例的常规 Connection 对象的 ID 相同。
38 39 40 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/pending_connection.rb', 第38行 def id @id end |
实例方法详细信息
#handshake_and_authenticate! ⇒对象
此方法是私有 API 的一部分。 您应尽可能避免使用此方法,因为它将来可能会被删除或更改。
40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 |
# File 'build/Ruby-driver-v 2.19 /lib/mongo/server/pending_connection.rb', 第40行 def 握手和身份验证! speculative_auth_doc = nil if [: user] || [:auth_mech] # 要创建身份验证实例,我们需要指定机制, # 但目前我们还不知道最终的机制 # 将被使用(因为这取决于返回的数据 # 握手,特别是服务器版本)。 # 但是,我们知道只有4.4 + 服务器支持推测性 # 身份验证,这些服务器通常也支持 # SCRAM-SHA- 256 。 我们预计为4.4创建的用户帐户 + # 服务器通常允许SCRAM-SHA- 256身份验证; 从4.4之前的服务器迁移的 # 个用户帐户可能只允许 # SCRAM-SHA- 1 。 因此,默认使用 SCRAM-SHA- 256 # 合理,也是推测性身份验证规范所强制执行的。 # 如果没有指定机制,并且我们正在与3.0 + #服务器,我们将发送推测性身份验证文档,服务器将 # 忽略它,我们将使用显式执行身份验证 # 在将机制默认为 CR 后执行的命令。 # 如果没有指定机制,并且我们正在与4.4 + #服务器和用户帐户不允许SCRAM-SHA- 256 ,我们将 # 使用 SCRAM-SHA- 1在单独的命令中进行身份验证 # 进行SCRAM机制协商。 = 选项::已编辑.new(:auth_mech => :scram 256) speculative_auth_user = auth::user.new(.合并(merge)()) speculative_auth = auth.获取(speculative_auth_user, self) speculative_auth_doc = speculative_auth.对话.speculative_auth_document end 结果 = 握手!(speculative_auth_doc: speculative_auth_doc) if 描述.未知? 提高 错误::内部驱动程序错误, " 成功握手后,连接描述不能为未知: #{ description.inspect} " end 开始 if speculative_auth_doc && (speculative_auth_result = 结果[' speculativeAuthenticate ']) 除非 描述.功能.Scram_sha_ 1 _enabled? 提高 错误::InvalidServerAuthResponse, “在3.0之前的服务器上,推测性身份验证成功” end 案例 speculative_auth_user.机制 when :mongodb_x 509 # Done # 我们默认将身份验证机制设置为SCRAM 256,但如果用户指定 # SCRAM明确表示我们可以进行推测性身份验证 # with SCRAM . when :scram, :scram 256 验证!( speculative_auth_client_nonce: speculative_auth.对话.client_nonce, speculative_auth_mech: speculative_auth_user.机制, speculative_auth_result: speculative_auth_result, ) else 提高 错误::内部驱动程序错误, " 机制 #{ speculative_auth_user . Mechanism . Inspect } 的推测 性身份验证意外成功 " end elsif !描述.仲裁节点? 验证! end 救援 mongo::错误, mongo::错误::AuthError => 排除 排除.service_id = service_id 提高 end if 描述.未知? 提高 错误::内部驱动程序错误, "成功身份验证后,连接描述不能为未知: #{ description .inspect } } " end if server.load_balancer? && !描述.mongos? 提高 错误::BadLoadBalancerTarget, " 负载均衡操作需要连接 mongos,但位于 # {address.seed } } 的 服务器 将 自身 报告 为 # { { description.server_type.to_s.gsub ( ' _ ' ,' ' ) } " end end |