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์ ๋๊ธ์ ์ฐธ์กฐ ํ์ธ์ .
@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 ์ ๋ ฅ์ ๊ฐ์ฌ๋๋ฆฝ๋๋ค. ๊ถ๊ทน์ ์ผ๋ก ์ฐ๋ฆฌ๋ ์ปค๋ฎค๋ํฐ๋ฅผ ๊ธฐ์๊ฒ ํ๊ณ ์ถ๊ธฐ ๋๋ฌธ์ ์ด ๊ธฐ๋ฅ์ด ๋ฏธ๋์ ๋ํด ๊ฒฐ์ ํ๊ธฐ ์ํด ์ผ๋ง๋ ๋ง์ด ์ฌ์ฉ๋๋์ง ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
์ด๊ฒ์ ๋ถ๋ช ํ ๋๋ฆฌ ํผ์ง ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ ๋๋ค. ์ง์ ํด ์ฃผ์ ์ ๊ฐ์ฌํฉ๋๋ค.
๊ฐ์ฅ ์ ์ฉํ ๋๊ธ
์๋ ํ์ธ์, ์ฌ๊ธฐ์ ๋ ๋ค๋ฅธ ์ฌ์ฉ ์ฌ๋ก๊ฐ ์์ต๋๋ค: elastic/elasticsearch-ruby#1479