https://www.freecodecamp.org/news/how-to-setup-user-authentication-in-flask/
我已经使用上面的链接进行了基本的用户身份验证,但我无法添加谷歌登录。
我已经尝试了很多次,但我无法添加谷歌登录。
任何人都可以帮我做这个吗? 问题是有src_ init _.py和manage.py(这是在src之外) 所以我不知道如何添加谷歌登录
当然,我可以帮将 Google 登录功能集成到的 Flask 应用程序中。
理解目录结构
提到了
src_init_.py
和
manage.py
文件,以及
src
文件夹。这种结构通常用于组织更大的 Flask 应用程序。
-
src
文件夹包含应用程序的主要代码。 -
src/__init__.py
文件用于初始化的 Flask 应用程序、配置数据库连接、注册蓝图等。 -
manage.py
文件通常用于运行脚本,例如启动开发服务器或与数据库交互。
集成 Google 登录
我们将使用 Flask-Dance 库来简化 Google 登录的集成。以下是将 Google 登录添加到的 Flask 应用程序的分步指南:
1. 安装必要的库:
pip install Flask-Dance[sqlalchemy,google]
2. 配置 Google OAuth 凭据:
- 访问 Google Cloud Console ( https://console.cloud.google.com ) 并创建一个新项目。
- 导航到“API 和服务”>“凭据”。
- 点击“创建凭据”>“OAuth 客户端 ID”。
- 选择“Web 应用程序”作为应用程序类型。
-
在“授权重定向 URI”字段中,输入以下内容,并替换
your-domain
为的应用程序域名:-
http://your-domain:5000/login/google/authorized
-
- 点击“创建”。
- 记下生成的“客户端 ID”和“客户端密钥”。
3. 更新的 Flask 应用程序:
-
在
src/__init__.py
文件中:
from flask import Flask, redirect, url_for
from flask_sqlalchemy import SQLAlchemy
from flask_login import LoginManager, UserMixin
from flask_dance.consumer.storage.sqla import OAuthConsumerMixin, SQLAlchemyStorage
from flask_dance.consumer import oauth_authorized, oauth_error
from flask_dance.contrib.google import make_google_blueprint
import os
# ... 其他导入 ...
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your-secret-key'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///app.db'
db = SQLAlchemy(app)
login_manager = LoginManager(app)
login_manager.login_view = 'login'
# Google OAuth 配置
os.environ['OAUTHLIB_INSECURE_TRANSPORT'] = '1' # 仅用于开发环境
blueprint = make_google_blueprint(
client_id="your-client-id",
client_secret="your-client-secret",
scope=["profile", "email"],
storage=SQLAlchemyStorage(OAuthConsumerMixin, db.session, user=User),
redirect_url="/"
)
app.register_blueprint(blueprint, url_prefix="/login")
# ... 其他代码 ...
@login_manager.user_loader
def load_user(user_id):
return User.query.get(int(user_id))
# 处理 Google 登录回调
@oauth_authorized.connect_via(blueprint)
def google_logged_in(blueprint, token):
if not token:
return False
resp = blueprint.session.get("/oauth2/v2/userinfo")
if not resp.ok:
return False
info = resp.json()
user = User.query.filter_by(email=info["email"]).first()
if user:
# 用户已存在,直接登录
login_user(user)
else:
# 创建新用户
user = User(name=info["name"], email=info["email"])
db.session.add(user)
db.session.commit()
login_user(user)
return redirect(url_for('home'))
# 处理 Google 登录错误
@oauth_error.connect_via(blueprint)
def google_error(blueprint, message, response):
return "Google 登录出错: " + str(message)
# ... 其他路由和视图函数 ...
-
替换占位符:
-
将
your-client-id
和your-client-secret
替换为在 Google Cloud Console 中获得的实际值。 -
将
http://your-domain:5000
替换为应用程序的实际域名和端口。
-
将
-
确保
User
模型定义正确:
class User(UserMixin, db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(255))
email = db.Column(db.String(255), unique=True)
# ... 其他用户字段 ...
4. 创建数据库表:
flask db init
flask db migrate
flask db upgrade
5. 运行的应用程序:
flask run
现在,应该会在的 Flask 应用程序中看到一个“使用 Google 登录”按钮。点击此按钮将重定向用户到 Google 进行身份验证。成功登录后,他们将被重定向回的应用程序,并在的数据库中创建一个新用户(如果该用户尚不存在)。
注意:
- 以上代码示例假设已经设置了 Flask-SQLAlchemy 和 Flask-Login。
-
将
OAUTHLIB_INSECURE_TRANSPORT
设置为1
仅用于本地开发环境。在生产环境中,请确保使用 HTTPS。 - 可以根据需要自定义 Google 登录按钮的外观和行为。
- 确保仔细阅读 Flask-Dance 文档以获取更多高级选项和自定义设置: https://flask-dance.readthedocs.io/