我使用tastypie和python-social-auth管理我的社交认证。 通过执行以下操作,我通过Facebook进行身份验证没有问题:
from social.apps.django_app import load_strategy
provider = “facebook”
access_token = “CAAIkpON595IBADC8CqXgq615wfsls15u6RI23sreqbzntau”
strategy = load_strategy(backend=provider)
user = strategy.backend.do_auth(access_token)
但是当我尝试使用provider =" twitter"和一个有效的访问令牌,我在调用' do_auth'方法。 我设法cURL到twitter api,所以我的凭证是有效的。
我错过了任何步骤吗? Twitter认证应该与facebook的不同?
谢谢!
答案 0 :(得分:0)
问题是我没有添加' redirect_uri'何时定义了'load_strategy'。 最后我最终得到了这段代码:
# setup redirect uri in order to load strategy
uri = redirect_uri = "social:complete"
if uri and not uri.startswith('/'):
uri = reverse(redirect_uri, args=(backend,))
# load the strategy
try:
strategy = load_strategy(
request=request, backend=backend,
redirect_uri=uri, **kwargs
)
except MissingBackend:
raise Http404('Backend not found')
感谢@omab在github问题页面中对此进行评论。
答案 1 :(得分:0)
我在register_by_access_token方法中遵循这些示例(我使用django作为Angular应用程序的API)。
在示例中,行:
user = request.backend.do_auth(access_token)
没有与twitter一起使用Twitter收到的oauth_token,为了让它工作,我必须创建以下access_token:
access_token = {
'oauth_token': auth[1],
'oauth_token_secret': auth[2]
}
其中auth [1]和[2]是twitter返回的值。
它很奇怪,因为我没有在任何地方找到这个记录,我发现那些错过了social_AUTH_TWITTER_KEY和SOCIAL_AUTH_TWITTER_SECRET的人会让它发挥作用。
fyi:我用django rest framework