Недавно работая над проектом, я наткнулся на проблему с попыткой реализовать интеграцию в Твиттере в мое приложение для колбы. Все направляющие в Google ломались или просто не вписывались с моим приложением. Я хотел простой способ интерфейса с API Twitter’s Oauth11, но все дало мне ошибки.
ЗАМЕТКА: В этом руководстве предполагается, что у вас установить приложение Twitter и установить ваши потребительские ключи и набор URL вызовов. Если вы не знаете, как это сделать, пожалуйста, обратитесь к Это руководство.
Наконец, я решил попробовать что-то самому себе, я посмотрел в запросы_оаутлиб и понял, что было бы намного проще просто использовать свой класс клиента для генерации подписей и внедрения с помощью приложения My Flask. Я не мог найти никаких примеров, которые были легко понять или прочитать, насколько кодекс пошел, поэтому я хотел поделиться тем, как я закончил реализовать это в мое приложение.
Сначала библиотеки я использовал в моей реализации. Flask – это библиотека, которую я использую, чтобы создать мой главный веб-сервер и проживание маршрутов. Мы не используем много разделить из функции перенаправления от нее в этом. Flock_restful – это библиотека отдыха, которую я использую, чтобы легко создать API на основе JSON. Конечные точки, которые мы создаем в этом, являются спокойными конечными точками API, которые наследуют класс ресурса с Flock_resful. requests_oauthlib – это библиотека OAUTH, которую я использую, чтобы создать заголовки OAuth для аутентификации с API Twitter. Мы также будем использовать библиотеку запросов, чтобы сделать запрос на стороне сервера в Twitter.
Сначала вам нужно настроить приложение Flask. Давайте сначала сделаем папку под названием App:
mkdir ./app cd ./app
Теперь из приложения/каталога мы создадим файл под названием init .
# Let's import the Flask class from the flask library from flask import Flask # Let's import the Api class from the flask_restful library from flask_restful import Api # Let's import our OAuth library to setup from requests_oauthlib.oauth1_auth import Client # Create A Config To Store Values config = { 'twitter_consumer_key': 'ENTER TWITTER CONSUMER KEY', 'twitter_consumer_secret': 'ENTER TWITTER CONSUMER SECRET' } # Initialize Our Flask App app = Flask(__name__) # Initialize Our RESTful API api = Api(app) # Initialize Our OAuth Client oauth = Client(config['twitter_consumer_key'], client_secret=config['twitter_consumer_secret'])
Это все, что нам нужно сделать сейчас в init .py файл. Далее мы начнем создавать наши конечные точки для Twitter. Это предполагает, что вы установили приложение Twitter, и у вас есть ваши потребительские ключи.
Далее мы создаем нашу конечную точку. Для этого мы можем просто создать файл под названием Twitter.py или действительно, что вы хотели бы. Далее мы добавляем:
# Import our functions and Resource class from flask_restful from flask_restful import Resource, reqparse # Import our functions from Flask from flask import redirect # Import our oauth object from our app from app import oauth # Import requests in order to make server sided requests import requests # We have to create our initial endpoint to login with twitter class TwitterAuthenticate(Resource): # Here we are making it so this endpoint accepts GET requests def get(self): # We must generate our signed OAuth Headers uri, headers, body = oauth.sign('https://twitter.com/oauth/request_token') # We need to make a request to twitter with the OAuth parameters we just created res = requests.get(uri, headers=headers, data=body) # This returns a string with OAuth variables we need to parse res_split = res.text.split('&') # Splitting between the two params sent back oauth_token = res_split[0].split('=')[1] # Pulling our APPS OAuth token from the response. # Now we have to redirect to the login URL using our OAuth Token return redirect('https://api.twitter.com/oauth/authenticate?oauth_token=' + oauth_token, 302)
Это наша конечная точка аутентификации, когда кто-то пытается ударить это, он будет перенаправлять их на страницу входа в Твиттере, которая затем отправит их на наш URL-адрес обратного вызова, который у вас должна быть установка в приборной панели приложения Twitter.
Далее нам нужно добавить логику для обработки нашего URL обратного вызова. Мы можем добавить это в тот же файл, что и класс Twitterauthenticate.
# We need to create a parser for that callback URL def callback_parser(): parser = reqparse.RequestParser() parser.add_argument('oauth_token') parser.add_argument('oauth_verifier') return parser # Now we setup the Resource for the callback class TwitterCallback(Resource): def get(self): parser = callback_parser() args = parser.parse_args() # Parse our args into a dict # We need to make a request to twitter with this callback OAuth token res = requests.post('https://api.twitter.com/oauth/access_token?oauth_token=' + args['oauth_token'] + '&oauth_verifier=' + args['oauth_verfier']]) res_split = res.text.split('&') # Now we need to parse our oauth token and secret from the response oauth_token = res_split[0].split('=')[1] oauth_secret = res_split[1].split('=')[1] userid = res_split[2].split('=')[1] username = res_split[3].split('=')[1] # We now have access to the oauth token, oauth secret, userID, and username of the person who logged in. # .... Do more code here # .... return redirect('http://somwhere.com", 302)
Этот класс TwitterCallback будет разобраться и обрабатывать токены OAuth, чтобы получить доступ к информации о учетной записи пользователя. Вы можете делать все, что вы хотите с этой информацией, хранят ли это в модели пользователя DB или запрашивать запросы с Tweepy!
Последний шаг добавляет эти конечные точки на ваш init .py Файл, который мы создали в начале! В нижней части файла добавьте это:
from app.twitter import TwitterAuthenticate, TwitterCallback api.add_resource(TwitterAuthenticate, '/authenticate/twitter') api.add_resource(TwitterCallback, '/callback/twitter') # This MUST match your Callback URL you set in the Twitter App Dashboard!!!
Наш последний Twitter.py должен выглядеть так:
from flask_restful import Resource, reqparse from flask import redirect from app import oauth import requests class TwitterAuthenticate(Resource): def get(self): uri, headers, body = oauth.sign('[https://twitter.com/oauth/request_token'](https://twitter.com/oauth/request_token')) res = requests.get(uri, headers=headers, data=body) res_split = res.text.split('&') # Splitting between the two params sent back oauth_token = res_split[0].split('=')[1] # Pulling our APPS OAuth token from the response. return redirect('[https://api.twitter.com/oauth/authenticate?oauth_token='](https://api.twitter.com/oauth/authenticate?oauth_token=') + oauth_token, 302) def callback_parser(): parser = reqparse.RequestParser() parser.add_argument('oauth_token') parser.add_argument('oauth_verifier') return parser class TwitterCallback(Resource): def get(self): parser = callback_parser() args = parser.parse_args() # Parse our args into a dict res = requests.post('[https://api.twitter.com/oauth/access_token?oauth_token='](https://api.twitter.com/oauth/access_token?oauth_token=') + args['oauth_token'] + '&oauth_verifier=' + args['oauth_verfier']]) res_split = res.text.split('&') oauth_token = res_split[0].split('=')[1] oauth_secret = res_split[1].split('=')[1] userid = res_split[2].split('=')[1] username = res_split[3].split('=')[1] # ... Do Code Here return redirect('[http://somwhere.com](http://somwhere.com)", 302)
Наш финал init .py должен выглядеть что-то вроде:
from flask import Flask from flask_restful import Api from requests_oauthlib.oauth1_auth import Client config = { 'twitter_consumer_key': 'ENTER TWITTER CONSUMER KEY', 'twitter_consumer_secret': 'ENTER TWITTER CONSUMER SECRET' } app = Flask(__name__) api = Api(app) oauth = Client(config['twitter_consumer_key'], client_secret=config['twitter_consumer_secret']) from app.twitter import TwitterAuthenticate, TwitterCallback api.add_resource(TwitterAuthenticate, '/authenticate/twitter') api.add_resource(TwitterCallback, '/callback/twitter')
Я надеюсь, что вы найдете это руководство полезным и проверить время, интегрируя с пользователями Twitter!
Вы можете найти Github Gist Здесь с файлами, показанными выше.
Следуй за мной на Twitter и Github Для более интересных программных материалов!
Оригинал: “https://dev.to/m4cs/simplifying-login-with-twitter-using-python-and-flask-48io”