欢迎访问宙启技术站
智能推送

在Flask应用中使用flask_login.current_user实现用户身份认证

发布时间:2023-12-24 23:20:12

在Flask应用中使用flask_login.current_user实现用户身份认证可以通过以下步骤进行。

首先,我们需要安装Flask和Flask-Login库。可以使用以下命令进行安装:

pip install Flask Flask-Login

接下来,我们可以创建一个简单的Flask应用,并初始化Flask-Login。在app.py文件中,我们可以编写以下代码:

from flask import Flask, render_template, request, redirect, url_for
from flask_login import LoginManager, login_user, logout_user, current_user, login_required, UserMixin

app = Flask(__name__)
app.secret_key = 'secret_key'

login_manager = LoginManager()
login_manager.init_app(app)


# 模拟用户
class User(UserMixin):
    def __init__(self, id):
        self.id = id


# 加载用户的回调函数
@login_manager.user_loader
def load_user(user_id):
    return User(user_id)


# 登录路由
@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        user_id = request.form.get('user_id')
        user = User(user_id)
        login_user(user)
        return redirect(url_for('dashboard'))
    return render_template('login.html')


# 登出路由
@app.route('/logout')
@login_required
def logout():
    logout_user()
    return redirect(url_for('login'))


# 仪表盘路由
@app.route('/dashboard')
@login_required
def dashboard():
    return render_template('dashboard.html')


# 首页路由
@app.route('/')
def index():
    return redirect(url_for('login'))


if __name__ == '__main__':
    app.run(debug=True)

在上面的代码中,我们首先创建了一个User类来模拟用户。该类继承了Flask-Login的UserMixin类,这是一个提供了一些默认实现的类,可以用于处理用户相关的方法。

接下来,我们初始化了一个LoginManager对象,并在app对象上调用了init_app方法。该方法会将login_manager对象绑定到我们的Flask应用中。

然后,我们创建了一个load_user的回调函数,并装饰它,使其成为登录管理器的用户加载函数。该函数负责使用给定的用户ID加载用户对象。在上述示例中,我们只是简单地创建一个User对象并返回。

接着,我们定义了登录和登出的路由。在登录路由中,首先检查请求方法是否为POST。如果是POST请求,我们使用从表单中获取的用户名创建一个User对象,并使用login_user函数将用户登录。然后,我们重定向到仪表盘的路由。如果请求方法不是POST,我们渲染登录模板。在登出路由中,我们使用logout_user函数登出用户,并重定向到登录的路由。

在仪表盘的路由中,我们使用@login_required装饰器标记该路由,以确保只有已登录的用户才能访问。在这个例子中,我们只是简单地渲染了一个仪表盘的模板。

最后,我们定义了一个首页的路由,将其重定向到登录的路由。

现在,我们可以创建相应的html模板文件。在templates文件夹中,我们可以创建login.html和dashboard.html两个文件。这里是一个简单的示例:

login.html:

<!doctype html>
<html>
  <head>
    <title>Login</title>
  </head>
  <body>
    <h1>Login</h1>
    <form method="post" action="{{ url_for('login') }}">
      <input type="text" name="user_id" placeholder="User ID" required>
      <button type="submit">Login</button>
    </form>
  </body>
</html>

dashboard.html:

<!doctype html>
<html>
  <head>
    <title>Dashboard</title>
  </head>
  <body>
    <h1>Welcome, {{ current_user.id }}!</h1>
    <a href="{{ url_for('logout') }}">Logout</a>
  </body>
</html>

在上述示例中,login.html模板呈现了一个简单的登录表单,通过POST方法提交到/login路由。dashboard.html模板显示了登录用户的用户ID,并提供了一个链接,可用于登出。

现在,运行该应用,我们可以通过访问http://localhost:5000来访问登录页面。在登录页面中,我们输入一个用户ID并点击登录按钮。然后,我们将被重定向到仪表盘页面,并看到欢迎消息和登出链接。

通过使用flask_login.current_user来实现用户身份认证,我们可以轻松地获取当前登录用户的信息,并根据需要进行操作。