LoginSignup
1
1

More than 3 years have passed since last update.

django-restframework-social-oauth2 で twitter login ができる様にする

Last updated at Posted at 2019-07-26

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',
)

コレで認証が通る
モジュールの中身を漁る時間がない人はお試しあれ

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1