authlib / authlib/authlib

Supplying api_base_url to OAuth2Session client has no effect

Open
#443 3 comments 1 reaction 0 assignees View on GitHub
role:client
Dominant language
Python
Stars
5.4k
Forks
563
PR merge metrics
No merged PRs in 30d

Description

**Describe the bug**

When instantiating a new `authlib.integrations.requests_client.OAuth2Session`, and supplying `api_base_url` to the constructor, `api_base_url` isn't used when making requests (ex `client.get('some/resource')`.)

**Error Stacks**
```
File "github_oauth_test.py", line 20, in auth_github_authorized
data = client.get('user').json()
File "/home/vagrant/.pyenv/versions/py3/lib/python3.7/site-packages/requests/sessions.py", line 542, in get
return self.request('GET', url, **kwargs)
File "/home/vagrant/.pyenv/versions/py3/lib/python3.7/site-packages/authlib/integrations/requests_client/oauth2_session.py", line 105, in request
method, url, auth=auth, **kwargs)
File "/home/vagrant/.pyenv/versions/py3/lib/python3.7/site-packages/requests/sessions.py", line 515, in request
prep = self.prepare_request(req)
File "/home/vagrant/.pyenv/versions/py3/lib/python3.7/site-packages/requests/sessions.py", line 453, in prepare_request
hooks=merge_hooks(request.hooks, self.hooks),
File "/home/vagrant/.pyenv/versions/py3/lib/python3.7/site-packages/requests/models.py", line 318, in prepare
self.prepare_url(url, params)
File "/home/vagrant/.pyenv/versions/py3/lib/python3.7/site-packages/requests/models.py", line 392, in prepare_url
raise MissingSchema(error)
requests.exceptions.MissingSchema: Invalid URL 'user': No scheme supplied. Perhaps you meant http://user/?
```

**To Reproduce**
We know there is a Flask OAuth client, and our example below doesn't use it, but uses Flask to create an easy, reproducible example. In our real app, we are using OAuth2Session client and not using Flask.
```python
import flask
import authlib.integrations.requests_client

app = flask.Flask(__name__)

@app.route('/')
def index():
client = _client()
uri, _ = client.create_authorization_url(
'https://github.com/login/oauth/authorize',
':8000/auth-github-authorize'
)
return flask.redirect(uri)

@app.route('/auth-github-authorized')
def auth_github_authorized():
client = _client()
client.fetch_token(authorization_response=flask.request.url)
# FIXME: I should join api_base_url with user
data = client.get('user').json()
print(data)

def _client(state=None):
return authlib.integrations.requests_client.OAuth2Session(
# '',
# '',
api_base_ur='https://api.github.com/',
scope='user:email',
state=state,
token_endpoint='https://github.com/login/oauth/access_token',
)

if __name__ == '__main__':
app.run(host='0.0.0.0', port=8000)
```

**Expected behavior**

`api_base_url` is joined with `user` in the call to `client.get()`.

**Environment:**

- OS: Fedora 32
- Python Version: 3.7.2
- Authlib Version: 1.0.0

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.