Python Flask
pip install Flask Authlib requests certifi cryptography
sudo caddy reverse-proxy --from example.com --to 127.0.0.1:5000
import os
import certifi
from flask import Flask, url_for, session, redirect
from authlib.integrations.flask_client import OAuth
os.environ['REQUESTS_CA_BUNDLE'] = certifi.where()
app = Flask(__name__)
app.secret_key = os.urandom(24)
app.config.update(
GOOGLE_CLIENT_ID='YOUR_GOOGLE_CLIENT_ID',
GOOGLE_CLIENT_SECRET='YOUR_GOOGLE_CLIENT_SECRET'
)
oauth = OAuth(app)
google = oauth.register(
name='google',
server_metadata_url='https://accounts.google.com/.well-known/openid-configuration',
client_kwargs={'scope': 'openid email profile'}
)
@app.route('/')
def index():
user = session.get('user')
if user:
return f"Hello, {user.get('email')}. <br><a href='/logout'>Logout</a>"
return '<a href="/login">Login with Google</a>'
@app.route('/login')
def login():
redirect_uri = url_for('auth', _external=True)
return google.authorize_redirect(redirect_uri)
@app.route('/auth')
def auth():
token = google.authorize_access_token()
user = token.get('userinfo')
session['user'] = user
return redirect('/')
@app.route('/logout')
def logout():
session.pop('user', None)
return redirect('/')
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5000, ssl_context='adhoc')