Skip to content

Commit f7d8f3d

Browse files
committed
DeviseTokenAuth::Url.generate should accept relate path
1 parent a689a06 commit f7d8f3d

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

lib/devise_token_auth/url.rb

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,15 +4,10 @@ module DeviseTokenAuth::Url
44

55
def self.generate(url, params = {})
66
uri = URI(url)
7+
query_params = Hash[URI.decode_www_form(uri.query || '')].merge(params)
8+
uri.query = URI.encode_www_form(query_params)
79

8-
res = "#{uri.scheme}://#{uri.host}"
9-
res += ":#{uri.port}" if (uri.port && uri.port != 80 && uri.port != 443)
10-
res += uri.path.to_s if uri.path
11-
query = [uri.query, params.to_query].reject(&:blank?).join('&')
12-
res += "?#{query}"
13-
res += "##{uri.fragment}" if uri.fragment
14-
15-
res
10+
uri.to_s
1611
end
1712

1813
def self.whitelisted?(url)

test/lib/devise_token_auth/url_test.rb

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,12 @@ class DeviseTokenAuth::UrlTest < ActiveSupport::TestCase
1010
assert_equal DeviseTokenAuth::Url.send(:generate, url, params), 'http://example.com?client_id=123#fragment'
1111
end
1212

13+
test 'relative path should be returned if url is relative' do
14+
params = { client_id: 123 }
15+
url = '/foobar'
16+
assert_equal DeviseTokenAuth::Url.send(:generate, url, params), '/foobar?client_id=123'
17+
end
18+
1319
describe 'with existing query params' do
1420
test 'should preserve existing query params' do
1521
url = 'http://example.com?a=1'

0 commit comments

Comments
 (0)