gpt4 book ai didi

python - Twython - 如何将多个 Twitter 帐户与一个用户关联

转载 作者:太空宇宙 更新时间:2023-11-03 19:03:15 24 4
gpt4 key购买 nike

我想允许注册用户添加多个 Twitter 帐户。我按照 twython-django 的例子,得到了一个用户的工作版本 - 一个 Twitter 帐户。如果用户尝试再次使用 Twitter 登录,再次遵循相同的 View ,我会收到此错误: token 无效/过期

我尝试将force_login=true添加到oauth/authorizeoauth/authenticate,从request.session中删除'request_token' dict,但我在 get_authentication_tokens() 期间仍然收到 Invalid Token 错误。

如何使用 twython 将多个 Twitter 帐户与同一用户正确关联?我在这里缺少什么?

这是一个 twython-django 示例:https://github.com/ryanmcgrath/twython-django/blob/master/twython_django_oauth/views.py

我的看法:

def twitter_login(request):
redirect_back_to_url = request.build_absolute_uri()

if 'request_token' not in request.session:
# request authorization tokens
t = Twython(twitter_token=settings.TWITTER_CONSUMER_KEY,
twitter_secret=settings.TWITTER_CONSUMER_SECRET,
callback_url=redirect_back_to_url)

# Request an authorization url to send the user to...
request_oauth_key = t.get_authentication_tokens()

# signing current session as one with twitter authentication
request.session['request_token'] = request_oauth_key

# redirecting the user to twitter authorization url for authentication
return HttpResponseRedirect(request_oauth_key['auth_url'])
else:
# user authenticated, receiving auth token
t2 = Twython(twitter_token=settings.TWITTER_CONSUMER_KEY,
twitter_secret=settings.TWITTER_CONSUMER_SECRET,
oauth_token=request.session['request_token'][
'oauth_token'],
oauth_token_secret=request.session['request_token'][
'oauth_token_secret'])

oauth_key = t2.get_authorized_tokens()

# save authorized tokens
# twitter oauth tokens dont expire
token = Token.objects.get_or_create(account_name=oauth_key['screen_name'],
token=oauth_key['oauth_token'],
secret=oauth_key['oauth_token_secret'])
user = request.user.get_profile()
user.twitter.add(token[0].id)
user.save()

logger.info('Successfully acquired twitter oauth token.')

return HttpResponseRedirect(reverse('profile'))

更新:可能的解决方案

我改变了我的观点:

def twitter_login(request):
redirect_back_to_url = request.build_absolute_uri()

if 'request_token' not in request.session:
# request authorization tokens
t = Twython(twitter_token=settings.TWITTER_CONSUMER_KEY,
twitter_secret=settings.TWITTER_CONSUMER_SECRET,
callback_url=redirect_back_to_url)

# Request an authorization url to send the user to...
request_oauth_key = t.get_authentication_tokens()

# signing current session as one with twitter authentication
request.session['request_token'] = request_oauth_key

# redirecting the user to twitter authorization url for authentication
return HttpResponseRedirect(request_oauth_key['auth_url'])
else:
# user authenticated, receiving auth token
t2 = Twython(twitter_token=settings.TWITTER_CONSUMER_KEY,
twitter_secret=settings.TWITTER_CONSUMER_SECRET,
oauth_token=request.session['request_token'][
'oauth_token'],
oauth_token_secret=request.session['request_token'][
'oauth_token_secret'])

oauth_key = t2.get_authorized_tokens()
if 'screen_name' not in oauth_key:
del request.session['request_token']
request.session.modified = True
return HttpResponseRedirect(reverse('twitter_login'))

# save authorized tokens
# twitter oauth tokens dont expire
token = Token.objects.get_or_create(account_name=oauth_key['screen_name'],
token=oauth_key['oauth_token'],
secret=oauth_key['oauth_token_secret'])
user = request.user.get_profile()
user.twitter.add(token[0].id)
user.save()

logger.info('Successfully acquired twitter oauth token.')

return HttpResponseRedirect(reverse('profile'))

目前还不确定这是否与此有关。我在 twython.py request_args['force_login'] = True 中的第 272 行之后添加。但是,正如我所说,我不确定这是否有任何影响,因为根据 https://dev.twitter.com/docs/api/1/post/oauth/request_token强制登录不是可选参数之一。

这是一些巫术。哈哈。告诉我这是否完全是垃圾。

最佳答案

嗯,我相信 OP 可以正常工作/正确,但作为快速分解,twython-django 并不是为了支持多个帐户关联而构建的(它也不在 Django 1.5 上,所以更新之前请小心~)。

您需要执行 OP 所做的操作,并为与用户匹配的 token 设置一个单独的表,然后通过拉取适当的 token 来处理他们当前使用的帐户。 OP使用force_login似乎也有效,因为虽然不一定有记录,但我相信它仍然有效(根据 this thread ,除非我误读了它 -如果是的话,我很乐意得到纠正)。

我不希望这个答案被接受,因为我并没有真正解决任何问题,但如果其他人遇到这个问题,我希望留下比上述注释更清晰的内容。希望一切顺利!

关于python - Twython - 如何将多个 Twitter 帐户与一个用户关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15523673/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com