Home  >  Article  >  Backend Development  >  Flask-Social: Adding social login to your Python web application

Flask-Social: Adding social login to your Python web application

PHPz
PHPzOriginal
2023-06-17 11:37:41792browse

With the rapid development of social media, more and more websites and applications are beginning to use social login to simplify the user registration and login process. However, implementing such functionality is not easy. How to interact with social networks via the OAuth protocol? How to use the obtained user information? How to deal with permissions and security? Fortunately, there is an excellent Python application extension like Flask-Social that can help us achieve this function more easily. This article will introduce the usage and basic principles of Flask-Social.

Flask-Social installation and configuration

First, we need to install Flask-Social. Use the pip tool to install quickly:

pip install Flask-Social

After the installation is complete, we need to configure Flask-Social in the Flask project. First introduce it in the Flask application:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask.ext.social import Social
from flask.ext.social.datastore import SQLAlchemyConnectionDatastore

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)

app.config['SOCIAL_AUTH_TWITTER_KEY'] = 'your_key'
app.config['SOCIAL_AUTH_TWITTER_SECRET'] = 'your_secret'

social = Social(app, SQLAlchemyConnectionDatastore(db))

In the above code, we first introduce the necessary dependency libraries, including Flask, SQLAlchemy and Flask-Social. Then, we define a Flask application and a SQLAlchemy database, as well as the URL to connect to the database. Next, we set the key and secret for Twitter authentication. Twitter is used here as an example. Of course, information from other social media platforms can also be used. Finally, initialize the social instance through the Social class and connect it with the SQLAlchemyConnectionDatastore class.

Basic usage of Flask-Social

With the above settings, we can now use Flask-Social to add social login functionality. Suppose we want to add Twitter login to our application, we can use the following code:

from flask import Flask, request, redirect, url_for, render_template
from flask_sqlalchemy import SQLAlchemy
from flask.ext.social import Social
from flask.ext.social.datastore import SQLAlchemyConnectionDatastore

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.secret_key = 'secret'

db = SQLAlchemy(app)

app.config['SOCIAL_AUTH_TWITTER_KEY'] = 'your_key'
app.config['SOCIAL_AUTH_TWITTER_SECRET'] = 'your_secret'

social = Social(app, SQLAlchemyConnectionDatastore(db))

@app.route('/')
def home():
    return render_template('home.html')

@app.route('/login')
def login():
    return social.twitter.authorize(callback=url_for('auth_twitter',
        next=request.args.get('next') or request.referrer or None))

@app.route('/auth/twitter')
def auth_twitter():
    resp = social.twitter.authorized_response()
    if resp is None:
        return redirect(url_for('home'))
    session['twitter_token'] = (
        resp['oauth_token'],
        resp['oauth_token_secret']
    )
    return redirect(url_for('profile'))

@app.route('/profile')
def profile():
    return render_template('profile.html')

The code here is simple: we first define a homepage, and then we define a login route, using social. twitter.authorize() function to generate the login page. Next, we handle the Twitter login information callback and store the token and secret in the session. Finally, we define a profile route to display user information.

Please note that in the above code, we also define an app.secret_key, which is used to generate the session key, which is required by Flask-Social.

Advanced application of Flask-Social: Github login

Of course, Twitter is not the only common social login platform. As a developer social networking site, Github is also very popular. So we added Github login to the Flask application with only slight changes, for example:

from flask import Flask, request, redirect, url_for, render_template, session
from flask_sqlalchemy import SQLAlchemy
from flask.ext.social import Social
from flask.ext.social.datastore import SQLAlchemyConnectionDatastore

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
app.secret_key = 'secret'

db = SQLAlchemy(app)

app.config['SOCIAL_AUTH_GITHUB_KEY'] = 'your_key'
app.config['SOCIAL_AUTH_GITHUB_SECRET'] = 'your_secret'

social = Social(app, SQLAlchemyConnectionDatastore(db))

@app.route('/')
def home():
    return render_template('home.html')

@app.route('/login')
def login():
    return social.github.authorize(callback=url_for('auth_github',
        next=request.args.get('next') or request.referrer or None))

@app.route('/auth/github')
def auth_github():
    resp = social.github.authorized_response()
    if resp is None:
        return redirect(url_for('home'))
    session['github_token'] = (
        resp['access_token'], ''
    )
    return redirect(url_for('profile'))

@app.route('/profile')
def profile():
    me = social.github.get('/user')
    return render_template('profile.html', name=me.data['name'])

As you can see, just modify the key and secret, and add it in authorize() and authorized_response() Use social.github in the method to achieve social login based on Github.

Summary of Flask-Social

With Flask-Social, we can easily add social login functionality to our Flask applications. Using Flask-Social, we can directly use Python code to operate the social network's API without having to deal with the OAuth protocol manually. If you want to support multiple social networks, all it takes is a slight code modification. With such a simple operation, you will reduce the troubles of countless users and increase the user loyalty and stickiness of your application.

The above is the detailed content of Flask-Social: Adding social login to your Python web application. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn