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.
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.
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.
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.
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!