这样好像只能保存一个用户
时间: 2024-02-02 11:03:43 浏览: 31
是的,上面的示例只是演示了如何保存一个用户的访问令牌(access token)。如果要支持多个用户登录,我们需要为每个用户保存一个独立的访问令牌(access token)。可以使用 session 对象的字典形式来保存多个用户的访问令牌(access token),例如:
```python
from flask import session
@app.route('/login')
def login():
callback_url = url_for('authorize', provider=provider_name, _external=True)
session['oauth_state'] = {} # 为每个用户保存一个独立的状态
return oauth.provider_name.authorize_redirect(callback_url)
@app.route('/authorize/<provider>')
def authorize(provider):
try:
resp = oauth.provider_name.authorized_response()
except OAuthException as e:
print(e.description)
return 'Authorization failed.'
if resp is None:
return 'Access denied: reason={0} error={1}'.format(
request.args['error_reason'],
request.args['error_description']
)
# 获取用户的访问令牌(access token)
access_token = resp['access_token']
# 获取用户的 ID
provider_user_id = resp['provider_user_id']
# 保存用户的访问令牌(access token)
oauth_state = session.get('oauth_state')
oauth_state[provider_user_id] = access_token
session['oauth_state'] = oauth_state
return redirect(url_for('index'))
@app.route('/api/me')
def me():
user_id = get_current_user_id()
access_token = session['oauth_state'].get(user_id)
if access_token is None:
return redirect(url_for('login'))
# 使用 access_token 请求用户的资源
```
在上面的示例中,我们为每个用户保存一个独立的状态(oauth_state),用于保存该用户的访问令牌(access token),并在登录成功后将该用户的访问令牌(access token)保存到该用户对应的状态中。在访问 /api/me 这个视图函数时,我们从 session 中获取当前用户的 ID,并使用其访问令牌(access token)来访问用户的资源。需要注意的是,这个示例只是演示了如何保存多个用户的访问令牌(access token),具体实现需要根据实际情况进行调整。