Faraday: ๊ธฐ๋ณธ ์ธ์ฆ์ด ํฌํ•จ๋œ URL ์ „๋‹ฌ์ด ์†์ƒ๋จ

์— ๋งŒ๋“  2021๋…„ 09์›” 01์ผ  ยท  5์ฝ”๋ฉ˜ํŠธ  ยท  ์ถœ์ฒ˜: lostisland/faraday

basic_auth๊ฐ€ url_prefix= https://github.com/lostisland/faraday/blob/0f9626c48d0daa24888cb4e5e7962d976a48 ์—์„œ ์—ฌ์ „ํžˆ ์‚ฌ์šฉ๋˜๊ธฐ ๋•Œ๋ฌธ์— ์ตœ๊ทผ ์ธ์ฆ ๋ฏธ๋“ค์›จ์–ด ๋ฆฌํŒฉํ† ๋ง์ด URI์˜ ์‚ฌ์šฉ์ž ์ •๋ณด ๋ถ€๋ถ„์— ๊ธฐ๋ณธ ์ธ์ฆ์ด ํฌํ•จ๋œ URL์„ ์ „๋‹ฌํ•˜๋Š” ๋ฐ ์‹คํŒจํ–ˆ์Šต๋‹ˆ๋‹ค.

~/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

์ด ๋ฌธ์ œ๋ฅผ ์ˆ˜์ •ํ• ์ง€ ์•„๋‹ˆ๋ฉด ์ด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์ง€์›์„ ์ œ๊ฑฐํ• ์ง€ ๊ฒฐ์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.

https://github.com/lostisland/faraday/issues/1308#issuecomment -909109525_์—์„œ @etiennebarrie์˜ ๋Œ“๊ธ€์„ ์ฐธ์กฐ ํ•˜์„ธ์š” .

bug unconfirmed

๊ฐ€์žฅ ์œ ์šฉํ•œ ๋Œ“๊ธ€

์•ˆ๋…•ํ•˜์„ธ์š”, ์—ฌ๊ธฐ์— ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: elastic/elasticsearch-ruby#1479

๋ชจ๋“  5 ๋Œ“๊ธ€

@etiennebarrie ์˜๊ฒฌ์—์„œ ๊ท€ํ•˜์˜ ์ƒ๊ฐ์„ ์ธ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

๋‚ด๊ฐ€ Basic_auth ๋ฐ Connection์— ๋Œ€ํ•œ ๊ถŒํ•œ ๋ถ€์—ฌ๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š” ๊ฒƒ์— ๋ฐ˜๋Œ€ํ•˜์ง€๋Š” ์•Š์ง€๋งŒ 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/์‚ฌ์šฉ์ž/๋น„๋ฐ€๋ฒˆํ˜ธ๋‹น ํ•˜๋‚˜์˜ ๋น„๋ฐ€๋งŒ ์žˆ์œผ๋ฉด ๋ฉ๋‹ˆ๋‹ค.


์šฐ๋ฆฌ๋Š” ๊ฐ ๋น„๋ฐ€์„ 3๊ฐœ๋กœ ์™„์ „ํžˆ ๋ถ„ํ• ํ•˜๊ฑฐ๋‚˜ ๋‹จ์ผ URL ๋น„๋ฐ€์„ ์œ ์ง€ํ•˜๋˜ ํŒจ๋Ÿฌ๋ฐ์ด์—๊ฒŒ ์ „๋‹ฌํ•˜๊ธฐ ์ „์— ์‚ฌ์šฉ์ž ๋น„๋ฐ€๋ฒˆํ˜ธ๋ฅผ ์ถ”์ถœํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

๊ทธ๋ ‡๊ตฐ์š” @etiennebarrie ํ™•์ธ

์•ˆ๋…•ํ•˜์„ธ์š”, ์—ฌ๊ธฐ์— ๋˜ ๋‹ค๋ฅธ ์‚ฌ์šฉ ์‚ฌ๋ก€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค: elastic/elasticsearch-ruby#1479

@tagliala ์ž…๋ ฅ์— ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. ๊ถ๊ทน์ ์œผ๋กœ ์šฐ๋ฆฌ๋Š” ์ปค๋ฎค๋‹ˆํ‹ฐ๋ฅผ ๊ธฐ์˜๊ฒŒ ํ•˜๊ณ  ์‹ถ๊ธฐ ๋•Œ๋ฌธ์— ์ด ๊ธฐ๋Šฅ์ด ๋ฏธ๋ž˜์— ๋Œ€ํ•ด ๊ฒฐ์ •ํ•˜๊ธฐ ์œ„ํ•ด ์–ผ๋งˆ๋‚˜ ๋งŽ์ด ์‚ฌ์šฉ๋˜๋Š”์ง€ ์ดํ•ดํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•ฉ๋‹ˆ๋‹ค.

์ด๊ฒƒ์€ ๋ถ„๋ช…ํžˆ ๋„๋ฆฌ ํผ์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์ง€์ ํ•ด ์ฃผ์…”์„œ ๊ฐ์‚ฌํ•ฉ๋‹ˆ๋‹ค.

์ด ํŽ˜์ด์ง€๊ฐ€ ๋„์›€์ด ๋˜์—ˆ๋‚˜์š”?
0 / 5 - 0 ๋“ฑ๊ธ‰