You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用OAuth 2.0 PKCE用户流调用Tweepy.get_me()时出现密钥错误

问题根源

你初始化Tweepy Client的方式有误——直接将OAuth2用户上下文的access token作为第一个参数传入,而该参数对应的是应用级认证的bearer token,导致Client默认采用应用级认证模式。调用get_me()时出现两种错误的原因:

  • 默认user_auth=True时,Client会尝试切换到OAuth1.0a认证流程,但你未提供Consumer Key等必要参数,因此抛出"Consumer key must be string or bytes, not NoneType"错误;
  • 设置user_auth=False时,Client用应用级认证访问仅支持用户上下文的端点,自然返回403禁止错误。
修复方案

修正Client初始化逻辑,明确指定access_token参数为OAuth2用户上下文的访问令牌,调用get_me()时保持默认的user_auth=True即可:

import tweepy

oauth2_user_handler = tweepy.OAuth2UserHandler(
    client_id="你的Client ID",
    redirect_uri="你的回调URI",
    scope=["follows.read", "users.read", "tweet.read", "offline.access"],
    client_secret="你的Client Secret"
)

# 从授权响应URL获取令牌数据
access_token_data = oauth2_user_handler.fetch_token(
    "Authorization Response URL here"
)

# 正确初始化Client,传入用户级access token
client = tweepy.Client(access_token=access_token_data['access_token'])

# 调用get_me()获取当前认证用户信息
user_response = client.get_me()
if user_response.data:
    print(f"用户ID: {user_response.data.id}, 用户名: {user_response.data.username}")
额外提示

如果需要实现离线访问(令牌过期后自动刷新),可以在初始化Client时同时传入refresh_token和oauth2_user_handler,后续令牌过期时调用oauth2_user_handler.refresh_token()更新令牌即可。

内容的提问来源于stack exchange,提问作者Conor Romano

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 14:40:29