我在使用 Flask-OAuthlib 库与 LinkedIn API 集成的 Flask 应用程序时遇到问题。该应用程序的目的是通过 LinkedIn 对用户进行身份验证并检索他们的个人资料信息。但是,我在尝试发出特定 API 请求来检索用户数据时遇到 404 错误。以下是设置和问题的详细说明:
import io
import json
import logging
import openai
import requests
from flask import Flask, request, jsonify, session, redirect, abort, url_for
from flask_oauthlib.client import OAuth
from pip._vendor import cachecontrol
# Flask app setup
app = Flask(__name__)
app.secret_key = "secret_key"
# OAuth setup with LinkedIn
oauth = OAuth(app)
linkedin = oauth.remote_app(
'Ety',
consumer_key='YOUR_CONSUMER_KEY',
consumer_secret='YOUR_CONSUMER_SECRET',
request_token_params={
'scope': ['email', "w_member_social", "profile", "openid"]
},
base_url='https://api.linkedin.com/v2/',
request_token_url=None,
access_token_method='POST',
access_token_url='https://www.linkedin.com/oauth/v2/accessToken',
authorize_url='https://www.linkedin.com/oauth/v2/authorization'
)
# LinkedIn tokengetter function
@linkedin.tokengetter
def get_linkedin_oauth_token():
return session.get('linkedin_token')
# LinkedIn login route
@app.route('/auth/linkedin')
def linkedin_login():
return linkedin.authorize(callback=url_for('linkedin_authorized', _external=True))
# LinkedIn authorized route
@app.route('/auth/linkedin/authorized')
def linkedin_authorized():
response = linkedin.authorized_response()
if response is None or response.get('access_token') is None:
return 'Access denied: reason={} error={}'.format(
request.args['error_reason'],
request.args['error_description']
)
session['linkedin_token'] = (response['access_token'], '')
access_token = response['access_token']
headers = {'Authorization': f'Bearer {access_token}'}
me_response = linkedin.get('/userinfo', headers=headers) # The problematic request
me_data = me_response.data
print(me_response.status)
print(me_data)
linkedin_id = me_data['sub']
session['linkedin_id'] = linkedin_id
session['name'] = me_data['name']
return redirect('/')
me_response = linkedin.get('/userinfo', headers=headers) 行会导致 404 错误。 OAuth 过程似乎可以工作,但检索用户数据的特定 API 请求失败。
我希望 linkedin.get('/userinfo', headers=headers) 请求能够成功从 LinkedIn 的 API 检索用户的个人资料数据,而不会出现 404 错误。
Flask-OAuthlib 用于 OAuth 身份验证。 应用程序的 LinkedIn API 凭据(消费者密钥和秘密)已正确配置。 请求的范围包括电子邮件、w_member_social、个人资料和 openid。 请注意,由于特定的 LinkedIn API 限制,请求的范围 r_emailaddress 和 r_liteprofile 未包含在范围列表中。 任何解决此问题的见解或解决方案将不胜感激。谢谢!