django-restframework-social-oauth2 は
現在生の状態だとTwitterログイン機能が使用できない。
仕方がないのでチョロっといじくり回して認証が通る様にしたので書き残しておく。
ぶっちゃけただのメモレベルなので、参考程度に見て欲しい。
#問題
Twitter API は、リソースにアクセスする際、アクセストークンが2つ必要になる
その為、公式ドキュメントに記載のある以下の方法では、トークンが一つしか送れない為、勿論エラーになる
curl -X POST -d "grant_type=convert_token&client_id=<client_id>&client_secret=<client_secret>&backend=<backend>&token=<backend_token>" http://localhost:8000/auth/convert-token
解決
token のキーに無理やりアクセストークンを2つ載せ、Twitter oauth のメソッドを一つだけオーバーライドし、トークンを書き換えればいい
書き換えるのは 同モジュール内の backends にある TwitterOAuth
from social_core.backends.twitter import TwitterOAuth
class TwitterOAuthModifyToken(TwitterOAuth):
"""Twitter OAuth authentication backend"""
def user_data(self, access_token, *args, **kwargs):
oauth_token = access_token.get('oauth_token').split('&')[0]
oauth_token_secret = access_token.get('oauth_token').split('&')[1].split('=')[1]
access_token['oauth_token'] = oauth_token
access_token['oauth_token_secret'] = oauth_token_secret
return super(TwitterOAuthModifyToken, self).user_data(access_token, *args, **kwargs)
POSTする json の書き方はこういう感じ、%26はパーセンテージエンコーディングしたアンパサンド
"token": "oauth_token=<oauth_token>%26oauth_token_secret=<oauth_token_secret>"
あとは、今作ったコイツを setting.py のバックエンドに指定すれば
AUTHENTICATION_BACKENDS = (
# Twitter
'okero.backends.TwitterOAuthModifyToken',
)
コレで認証が通る
モジュールの中身を漁る時間がない人はお試しあれ