単純な“Twitterとのログイン”を使用して、Python、djangoとdjangoレストフレームワークを使用します.
15724 ワード
Twitterが批判されている一つのことは、APIの悪いドキュメントです.APIのいくつかはよく文書化されていません.Twitterのドキュメントを使用することで、時々多くの時間を過ごすことができます.最近、私はユーザーがTwitterでログインできる機能を持つJjangoプロジェクトに取り組んでいました.だから、私はTwitterのOAuth 1 APIとのインターフェイスを使用して簡単な方法
前に述べたように、私は
Twitterでログインを実行するには3つの手順があります.リクエストトークンを取得し、ユーザーをリダイレクトし、リクエストトークンをアクセストークンに変換します.実装では、ステップが終了し、もう一方が始まるところを指摘するのは難しいかもしれません.つの手順の実行に飛び込む前に、これらの行をURLに含めます.Pyファイル.
手順1 :一時リクエストトークンを要求する.
この流れの最初のステップは署名されたメッセージを送ることによって要求トークンを得ることです
Step 2 :ユーザをリダイレクトする.
次のステップは、ユーザーがTwitterにあなたのアプリケーションを認可するように指示することです.この実装はユーザをリダイレクトすることです
あなたの見解で.Pyファイルには、次のコードが含まれます.
ステップ3 :一時リクエストトークンをトークンにアクセスする.
認証が成功すると、コールバックURLはクエリパラメータを含むリクエストを受け取ります
お読みありがとうございます.
requests_oauthlib
図書館.私はすでに使用していたrequest_oauthlib
他のサードパーティのAPIとのインターフェイスをライブラリには、代わりに代わりに使用してスティックを選択します.私がオンラインで得たすべての解決は、私に誤りを与えていました.これらのオンラインソリューションの問題は、必要なパラメータのいずれかですoauth_callback_url
) Twitterにリクエストを送るのは省略されますauth/request_token
エンドポイントまたはgetリクエストはPOSTリクエストの代わりに送られます.それを実現すると、自分で何かを試してみることにした.幸いにも、それは私のために働いた.私が通過したハードルをスペアにするために、この短い記事は、あなたのDjangoプロジェクトでTwitterでログインを実行することを通してあなたを案内することを目指します.前に述べたように、私は
requests_oauthlib
図書館.これは、DJangoプロジェクトを設定するには、Twitterのアプリを作成し、すべての必要なTwitterアプリの設定を行うには、この記事の範囲を超えていることに注意することが重要です.それらを助けることができる多くのリソースのオンラインがあります.しかし、私はそれを言及する必要があります、あなたのコールバックのURLを設定し、“このアプリはTwitterでログインするために使用できるようにチェックするか?”Twitterで無効にされているあなたの要求を避けるためにあなたのTwitterのアプリのダッシュボードのオプション.コールバックURLは、あなたがTwitterを直接認証をした後に認証したい場所です.Twitterでログインを実行するには3つの手順があります.リクエストトークンを取得し、ユーザーをリダイレクトし、リクエストトークンをアクセストークンに変換します.実装では、ステップが終了し、もう一方が始まるところを指摘するのは難しいかもしれません.つの手順の実行に飛び込む前に、これらの行をURLに含めます.Pyファイル.
from django.urls import path
from . import views
urlpatterns += [
path(
"auth/twitter/redirect/",
views.TwitterAuthRedirectEndpoint.as_view(),
name="twitter-login-redirect",
),
path(
"callback/twitter/",
views.TwitterCallbackEndpoint.as_view(),
name="twitter-login-callback",
),
]
我々は最終的にここにある!手順1 :一時リクエストトークンを要求する.
この流れの最初のステップは署名されたメッセージを送ることによって要求トークンを得ることです
POST oauth/request_token
. あなたがここで注意しなければならないカップルのものがあります.まず、リクエストはPOSTリクエストである必要があります.第二に、要求の本文が含まなければなりませんoauth_callback_url
, URLをURLエンコードされたバージョンでなければなりません.このURLがアプリケーションダッシュボードに設定されているものと一致しない場合、Twitterはエラー応答を返します.Step 2 :ユーザをリダイレクトする.
次のステップは、ユーザーがTwitterにあなたのアプリケーションを認可するように指示することです.この実装はユーザをリダイレクトすることです
oauth/authenticate
前のステップから得られたOAuthRankトークンを通過している間、端点をつけてください.あなたの見解で.Pyファイルには、次のコードが含まれます.
from requests_oauthlib import OAuth1
from urllib.parse import urlencode
from rest_framework.views import APIView
from django.http.response import HttpResponseRedirect
class TwitterAuthRedirectEndpoint(APIView):
def get(self, request, *args, **kwargs):
try:
oauth = OAuth1(
settings.TWITTER_API_KEY,
client_secret=settings.TWITTER_API_SECRET_KEY
)
#Step one: obtaining request token
request_token_url = "https://api.twitter.com/oauth/request_token"
data = urlencode({
"oauth_callback": settings.TWITTER_AUTH_CALLBACK_URL
})
response = requests.post(request_token_url, auth=oauth, data=data)
response.raise_for_status()
response_split = response.text.split("&")
oauth_token = response_split[0].split("=")[1]
oauth_token_secret = response_split[1].split("=")[1]
#Step two: redirecting user to Twitter
twitter_redirect_url = (
f"https://api.twitter.com/oauth/authenticate?oauth_token={oauth_token}"
)
return HttpResponseRedirect(twitter_redirect_url)
except ConnectionError:
html="<html><body>You have no internet connection</body></html>"
return HttpResponse(html, status=403)
except:
html="<html><body>Something went wrong.Try again.</body></html>"
return HttpResponse(html, status=403)
ユーザーがヒットするとauth/twitter/redirect/
URLTwitterAuthRedirectEndpoint
POSTリクエストを行うビューが実行されますoauth/request_token
URLのエンコードされたバージョンのリクエストの本文のURLを使用します.リクエストが正常に終了すると、応答が解析されますoauth_token
, and oauth_secret
. これの後、ユーザーはURLにリダイレクトされますhttps://api.twitter.com/oauth/authenticate?oauth_token=oauth_token
を含むoauth_token
パラメータステップ3 :一時リクエストトークンをトークンにアクセスする.
認証が成功すると、コールバックURLはクエリパラメータを含むリクエストを受け取ります
oauth_token
とOAuthSum検証器.最後のステップは、OAuth/AccessResトークンエンドポイントにポストリクエストを作成することですoauth_token
アクセストークンを指定します.リクエストには、クエリパラメータとしてOAuSum Verifierを含める必要があります.成功したリクエストでは、応答はOAuthRankトークンとoauth_token__secret
パラメータ.これらのトークンを格納することができますし、将来的に要求をするために使用します.class TwitterCallbackEndpoint(APIView):
def get(self, request, *args, **kwargs):
try:
oauth_token = request.query_params.get("oauth_token")
oauth_verifier = request.query_params.get("oauth_verifier")
oauth = OAuth1(
settings.TWITTER_API_KEY,
client_secret=settings.TWITTER_API_SECRET_KEY,
resource_owner_key=oauth_token,
verifier=oauth_verifier,
)
res = requests.post(
f"https://api.twitter.com/oauth/access_token", auth=oauth
)
res_split = res.text.split("&")
oauth_token = res_split[0].split("=")[1]
oauth_secret = res_split[1].split("=")[1]
user_id = res_split[2].split("=")[1] if len(res_split) > 2 else None
user_name = res_split[3].split("=")[1] if len(res_split) > 3 else None
f#store oauth_token, oauth_secret, user_id, user_name
redirect_url="https: //www.where-to-redirect-users-to"
return HttpResponseRedirect(redirect_url)
except ConnectionError:
return HttpResponse(
"<html><body>You have no internet connection</body></html>", status=403
)
except:
return HttpResponse(
"<html><body>Something went wrong.Try again.</body></html>", status=403
)
二つの線TwitterCallbackEndpoint
oauthchenトークンを取得し、oauth_verifier
TwitterのコールバックURLに送信します.以来、OAuth1
クラスには、検証フィールドが設定されていますoauth_verifier
Auth/accessCountトークンエンドポイントへのパラメータ.お読みありがとうございます.
Reference
この問題について(単純な“Twitterとのログイン”を使用して、Python、djangoとdjangoレストフレームワークを使用します.), 我々は、より多くの情報をここで見つけました https://dev.to/mustaphatidooyussif/simplifying-login-with-twitter-using-python-django-and-django-rest-framework-4f5kテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol