CÀI ĐẶT LOGIN GOOGLE TRONG PYTHON FLASK
25/02/2022 575

Trong bài viết này, CO-WELL Asia sẽ hướng dẫn các bạn cách cơ bản nhất để có thể login Google trong Python Flask.
Để bắt đầu, trước tiên chúng ta phải tạo một dự án trong Google Developers của Google để lấy được client key và client secret của người dùng.
1. Tạo project trên Google Console
- Truy cập Google Console: https://console.cloud.google.com/
Đăng nhập bằng thông tin đăng nhập Google của bạn nếu bạn chưa thể đăng ký
- “Chọn một dự án mới” → “Dự án mới”
- Điền đầy đủ tên dự án → “Để tạo”
2. Tạo Credentials
Bước tiếp theo để cài đặt login Google trong Python Flask cũng khá đơn giản, bạn hãy lần lượt làm theo những thao tác sau:
- Ấn và chọn “API và dịch vụ”
- “Nhận dạng” => “Tạo định số nhận dạng”
- “ID ứng dụng khách OAuth”
- “Đồng ý” → Loại người dùng chọn “Bên Ngoài”
3. Điền thông tin ứng dụng
- Điền đủ thông tin, sau đó ấn “Lưu và tiếp tục” cho đến khi hoàn tất
- Sau đó quay lại “API và dịch vụ” → Chọn “ID ứng dụng khách OAuth”
- Chọn “Loại ứng dụng” → Chọn phân loại ứng dụng cho dự án của bạn. (Mình chọn ứng dụng web)
- Sau đó điền tên, nguồn gốc Javascript được phép, URI chuyển hướng được phép → Tạo
Sau bước trên, bạn sẽ thấy một hộp thoại có client ID và client secret. Sao chép cả hai chuỗi hoặc tải xuống file JSON vì chúng ta sẽ cần những chuỗi này.
4. Tạo config cho ứng dụng và chạy thử nghiệm login Google trong Python Flask
Nếu không đăng nhập, chúng ta chuyển hướng người dùng đến trang đăng nhập có chứa liên kết đến thông tin đăng nhập Google
from authlib.integrations.flask_client import OAuth
app.config['GOOGLE_CLIENT_ID'] = "your google client id"
app.config['GOOGLE_CLIENT_SECRET'] = "your google client secret"
oauth = OAuth(app)
google = oauth.register(
name = 'google',
client_id = app.config["GOOGLE_CLIENT_ID"],
client_secret = app.config["GOOGLE_CLIENT_SECRET"],
access_token_url = 'https://accounts.google.com/o/oauth2/token',
access_token_params = None,
authorize_url = 'https://accounts.google.com/o/oauth2/auth',
authorize_params = None,
api_base_url = 'https://www.googleapis.com/oauth2/v1/',
client_kwargs = {'scope': 'openid email profile'},
)
URL route cho login và điều hướng
@app.route('/login/google')
def google_login():
google = oauth.create_client('google')
redirect_uri = url_for('google_authorize', _external=True)
return google.authorize_redirect(redirect_uri)
@app.route('/login/google/authorize')
def google_authorize():
try:
google = oauth.create_client('google')
token = google.authorize_access_token()
user_info = google.get('userinfo').json()
u_email = user_info['email']
user = Users.query.filter_by(email=user_info['email']).first()
if not user:
reg = Users(user_info['name'], user_info['email'], '')
db.session.add(reg)
db.session.commit()
session['current_user'] = user_info['name']
session['user_available'] = True
return render_template('index.html', user=user)
except Exception as error:
print(error)
return redirect(url_for('login'))
Và đây là kết quả khi chạy thử nghiệm