如何用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
相关产品推荐
相关产品推荐

