عطلت إعادة بناء البرامج الوسيطة للمصادقة الأخيرة تمرير عنوان URL مع المصادقة الأساسية المضمنة في جزء معلومات المستخدم من URI ، لأن basic_auth لا يزال مستخدمًا في url_prefix=
https://github.com/lostisland/faraday/blob/0f9626c48d0daa24888cb4e5e7962c106a48d97f/ lib / faraday / connection.rb # L364 -L367
~/src/github.com/lostisland/faraday (1.x) $ ruby -Ilib -rfaraday -rfaraday/net_http -rjson -e "puts JSON.load(Faraday.new(url: 'https://user:[email protected]/headers').get.body)['headers']['Authorization']"
WARNING: `Faraday::Connection#basic_auth` is deprecated; it will be removed in version 2.0.
While initializing your connection, use `#request(:basic_auth, ...)` instead.
See https://lostisland.github.io/faraday/middleware/authentication for more usage info.
Basic dXNlcjpwYXNzd29yZA==
~/src/github.com/lostisland/faraday (main) $ ruby -Ilib -rfaraday -rfaraday/net_http -rjson -e "puts JSON.load(Faraday.new(url: 'https://user:[email protected]/headers').get.body)['headers']['Authorization']"
lib/faraday/connection.rb:365:in `block in url_prefix=': undefined method `basic_auth' for #<Faraday::Connection:0x00007fed250abaa8 @parallel_manager=nil, @headers={}, @params={}, @options=#<Faraday::RequestOptions (empty)>, @ssl=#<Faraday::SSLOptions (empty)>, @default_parallel_manager=nil, @manual_proxy=nil, @builder=#<Faraday::RackBuilder:0x00007fed25092210 @adapter=Faraday::Adapter::NetHttp, @handlers=[Faraday::Request::UrlEncoded]>, @url_prefix=#<URI::HTTPS https://user:[email protected]/headers>> (NoMethodError)
from lib/faraday/connection.rb:506:in `with_uri_credentials'
from lib/faraday/connection.rb:364:in `url_prefix='
from lib/faraday/connection.rb:84:in `initialize'
from lib/faraday.rb:96:in `new'
from lib/faraday.rb:96:in `new'
from -e:1:in `<main>'
يتوفر اختبار يوضح ذلك هنا: https://github.com/lostisland/faraday/compare/1.x...etiennebarrie : test-basic-auth-in-url:
it 'uses User Information from the URI for Basic authentication' do
conn.url_prefix = 'http://user:[email protected]'
expect(conn.url_prefix.to_s).to eq('http://sushi.com/')
request = conn.build_request(:get)
expect(request.headers['Authorization']).to eq("Basic #{Base64.strict_encode64('user:password')}")
end
يجب أن نقرر ما إذا كنا نريد إصلاح هذا أو إزالة الدعم لهذه الميزة.
شاهد تعليق etiennebarrie في https://github.com/lostisland/faraday/issues/1308#issuecomment -909109525_
etiennebarrie أقتبس أفكارك من التعليق:
على الرغم من أنني لا أعارض إهمال basic_auth والترخيص في الاتصال ، أعتقد أن القدرة على الحصول على مصادقة أساسية مضمنة في عنوان URL أمر مفيد حقًا (يمكن تهيئته في أسرار على سبيل المثال).
أنا أفكر بجدية في إزالة الدعم لهذا.
يبدو أن هذه الممارسة قد تم إهمالها مرة أخرى في عام 2005 وأن معظم المتصفحات الرئيسية أسقطت دعمها أيضًا.
أشعر بالفضول أيضًا بشأن المثال أعلاه:
يمكن تهيئته في أسرار على سبيل المثال
لا أرى كيف أن استخدام البرنامج الوسيطbasic_auth
لن يسمح باستخدام الأسرار؟
ألا يعمل شيء مثل هذا؟
# Faraday 1.x
conn = Faraday.new(url_with_no_userinfo) do |f|
conn.request :basic_auth, Secrets.basic_auth_user, Secrets.basic_auth_pass
...
end
نقوم في الأساس بما يلي:
def connection
Faraday.new(url: server) do
# other config
end
end
def server
if global?
secrets.global
elsif something?
secrets.other
elsif something_else?
secrets.another
end
end
لذلك نحتاج فقط إلى سر واحد لكل عنوان URL / مستخدم / كلمة مرور.
يمكننا تقسيم كل سر تمامًا إلى ثلاثة ، أو حتى الاحتفاظ بسرية عنوان URL الفردي ولكننا نستخرج كلمة مرور المستخدم قبل تمريرها إلى Faraday.
نعم هذا ما اعتقدته ، شكرًا لتأكيد
مرحبًا ، هذه حالة استخدام أخرى: مطاط / مطاطي-ياقوتي # 1479
شكرًا على الإدخال tagliala ، نريد في النهاية إرضاء المجتمع ، لذلك من المهم فهم مقدار استخدام هذه الميزة من أجل تحديد مستقبلها.
من الواضح أن هذه مكتبة واسعة الانتشار ، لذا نشكرك كثيرًا على الإشارة إليها
التعليق الأكثر فائدة
مرحبًا ، هذه حالة استخدام أخرى: مطاط / مطاطي-ياقوتي # 1479