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

如何用Tweepy生成验证器,实现用户授权Twitter应用?

如何在Tweepy的OAuth1认证中获取verifier值?

我正在开发一款简单应用,允许用户通过Twitter账号进行认证,该应用会维护关注者和屏蔽账号列表,并定期更新已授权的账号。目前我遇到的问题是,用户点击授权链接后,如何获取verifier(验证器)。以下是我基于Tweepy文档中三方OAuth部分编写的代码:

import tweepy
import JSONReader #Custom class to retrieve credentials easily without showing raw data

keys = JSONReader.get_client('credentials.json')

oauth_user_handler = tweepy.OAuth1UserHandler(
    keys[0], keys[1], # These are the client key/secret
    callback="https://127.0.0.1"
)

auth_url = oauth_user_handler.get_authorization_url(signin_with_twitter=True)

print(auth_url) 

access_token, access_token_secret = oauth_user_handler.get_access_token(verifier= IDK HOW TO GET THIS)

client = tweepy.Client(
    consumer_key=keys[0],
    consumer_secret=keys[1],
    access_token=access_token,
    access_token_secret=access_token_secret
)

请问如何获取verifier,以便存储用户令牌和密钥来创建客户端对象?


解决方案

Verifier是Twitter在用户完成授权后,通过你指定的回调URL返回的请求参数(参数名是oauth_verifier),分两种场景处理:

1. 本地Web测试(适合正式应用流程)

你需要搭建一个简单的Web服务来接收Twitter的回调请求,提取verifier参数。以Flask为例:

import tweepy
from flask import Flask, request
import JSONReader

app = Flask(__name__)
keys = JSONReader.get_client('credentials.json')
oauth_user_handler = None

@app.route('/')
def auth_callback():
    global oauth_user_handler
    # 从回调请求中获取verifier
    verifier = request.args.get('oauth_verifier')
    # 使用verifier获取访问令牌
    access_token, access_token_secret = oauth_user_handler.get_access_token(verifier)
    
    # 这里可以把令牌存储到数据库或文件
    print(f"Access Token: {access_token}")
    print(f"Access Token Secret: {access_token_secret}")
    
    # 创建客户端并使用
    client = tweepy.Client(
        consumer_key=keys[0],
        consumer_secret=keys[1],
        access_token=access_token,
        access_token_secret=access_token_secret
    )
    # 测试调用API,比如获取用户信息
    user = client.get_me()
    return f"授权完成!用户ID: {user.data.id}"

if __name__ == '__main__':
    # 初始化OAuth处理器,回调地址设为Flask的路由
    oauth_user_handler = tweepy.OAuth1UserHandler(
        keys[0], keys[1],
        callback="http://127.0.0.1:5000/"
    )
    auth_url = oauth_user_handler.get_authorization_url(signin_with_twitter=True)
    print(f"请访问此链接授权: {auth_url}")
    # 启动Flask服务
    app.run(port=5000)

注意:要在Twitter开发者后台的应用设置里,把http://127.0.0.1:5000/添加到「已允许的回调URL」列表中。

2. 命令行手动获取(适合快速测试)

如果只是临时测试,不需要Web服务,可以用oob(无回调)模式:

import tweepy
import JSONReader

keys = JSONReader.get_client('credentials.json')

# 把回调设为'oob'
oauth_user_handler = tweepy.OAuth1UserHandler(
    keys[0], keys[1],
    callback='oob'
)

auth_url = oauth_user_handler.get_authorization_url(signin_with_twitter=True)
print(f"请访问此链接授权: {auth_url}")
# 用户授权后,Twitter会显示一串verifier码,让用户手动输入
verifier = input("请输入页面显示的验证码: ")

# 获取访问令牌
access_token, access_token_secret = oauth_user_handler.get_access_token(verifier)

# 创建客户端
client = tweepy.Client(
    consumer_key=keys[0],
    consumer_secret=keys[1],
    access_token=access_token,
    access_token_secret=access_token_secret
)

这种模式需要在Twitter开发者后台的应用设置中,开启「允许OAuth 1.0a的无回调(oob)」选项。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 05:27:18