Рубрики
Без рубрики

Упрощение «входа в систему с Twitter» с помощью Python и Flask.

Недавно работая над проектом, я наткнулся на проблему с попыткой реализовать в Twitter Integra … Tagged Python, WebDev, Безопасность.

Недавно работая над проектом, я наткнулся на проблему с попыткой реализовать интеграцию в Твиттере в мое приложение для колбы. Все направляющие в 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”