Java教程

登录架构入门指南:轻松搭建安全的登录系统

本文主要是介绍登录架构入门指南:轻松搭建安全的登录系统,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
概述

登录架构是一套用于管理用户登录、认证和授权的系统,确保用户能够安全便捷地访问应用或服务。它包含用户认证、会话管理、权限控制等多个组成部分,对于保障应用的安全性和用户体验至关重要。登录架构的设计需要考虑安全性、易用性和可扩展性等多个方面,常见的登录模式包括基于Cookie、基于Session和基于Token的方式。

登录架构简介
什么是登录架构

登录架构是用于管理用户登录、认证和授权的一套系统,确保用户能够安全、便捷地访问应用或服务。登录架构通常包括用户认证、会话管理、权限控制等功能模块。

登录架构的基本组成部分

登录架构主要包含以下几个组成部分:

  • 用户认证:验证用户身份是否合法,通常通过用户名和密码进行验证。
  • 会话管理:管理用户的会话状态,确保用户在登录后能够持续访问应用。
  • 权限控制:控制用户可以访问哪些资源或功能,确保用户操作符合安全和权限规则。
  • 安全性机制:包括密码加密、防止SQL注入等,保证系统的安全性。
  • 用户界面:提供用户登录、注册、密码重置等操作界面。
登录架构的重要性

登录架构是确保应用安全性和用户体验的重要组成部分:

  • 安全性:防止未经授权的访问,保护用户数据安全。
  • 用户体验:简化用户操作,提供便捷的登录和注销流程。
  • 系统稳定性:通过合理的会话管理和缓存策略,保持系统的性能和稳定性。
  • 可扩展性:设计良好的登录架构可以适应未来业务的增长和变化。

示例代码

以下是一个简单的用户登录验证示例,使用Python编写:

import hashlib

def hash_password(password):
    """使用SHA-256哈希函数来加密密码"""
    return hashlib.sha256(password.encode()).hexdigest()

def verify_password(stored_password, provided_password):
    """验证提供的密码是否与存储的哈希密码匹配"""
    return stored_password == hash_password(provided_password)

# 假设存储的密码哈希为
stored_password_hash = '5e884898da28313c34b7e1a1f41bbecc'

provided_password = input("请输入密码: ")
hashed_password = hash_password(provided_password)

if verify_password(stored_password_hash, provided_password):
    print("登录成功")
else:
    print("密码错误")
常见登录架构类型
基于Cookie的登录模式

基于Cookie的登录模式是最常见的登录方式之一。客户端在成功登录后,服务器会生成一个包含用户身份信息的Cookie,并将其发送给客户端浏览器。每次请求时,客户端都会携带此Cookie返回给服务器进行验证。

优缺点

  • 优点

    • 实现简单,易于开发。
    • 浏览器可以自动管理Cookie,减轻客户端负担。
    • 适合小型应用或初期开发。
  • 缺点
    • 安全性较低,Cookie容易被劫持或篡改。
    • Cookie存储敏感信息可能导致风险。
    • 会话管理复杂,需要合理的过期时间设置。

示例代码

以下是一个简单的基于Cookie的登录示例,使用Flask框架编写:

from flask import Flask, request, make_response, redirect, session

app = Flask(__name__)
app.secret_key = 'supersecretkey'  # 密钥用于加密session

@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    password = request.form['password']

    # 验证用户名和密码
    if username == 'user' and password == 'password':
        session['username'] = username
        return redirect('/')
    else:
        return '登录失败'

@app.route('/')
def index():
    if 'username' in session:
        return f"欢迎, {session['username']}"
    else:
        return redirect('/login')

@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect('/login')
基于Token的登录模式

基于Token的登录模式使用JWT(JSON Web Tokens)等机制来验证用户身份。服务器在用户成功登录后生成一个包含用户信息的Token,并返回给客户端。客户端每次请求时都需携带Token进行验证。

优缺点

  • 优点

    • 安全性高,Token不易被篡改。
    • 支持跨域访问,Token可以由后端服务器生成并返回给客户端。
    • 简化会话管理,减少服务器端存储会话的负担。
  • 缺点
    • 实现相对复杂,需要处理Token的生成、存储和验证。
    • 客户端需要管理Token,增加了客户端的复杂度。
    • 大量请求可能增加服务器端的处理负担。

示例代码

以下是一个简单的基于JWT的登录示例,使用Python编写:

import jwt
from flask import Flask, request, make_response
from datetime import datetime, timedelta

app = Flask(__name__)
app.config['SECRET_KEY'] = 'supersecretkey'

def generate_token(username):
    payload = {
        'username': username,
        'exp': datetime.utcnow() + timedelta(days=1)  # Token过期时间
    }
    return jwt.encode(payload, app.config['SECRET_KEY'], algorithm='HS256')

@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    password = request.form['password']

    # 验证用户名和密码
    if username == 'user' and password == 'password':
        token = generate_token(username)
        return make_response({'token': token.decode()})
    else:
        return '登录失败'

@app.route('/protected')
def protected():
    token = request.headers.get('Authorization', None)
    if token:
        try:
            payload = jwt.decode(token, app.config['SECRET_KEY'], algorithms=['HS256'])
            username = payload['username']
            return f"欢迎, {username}"
        except jwt.ExpiredSignatureError:
            return 'Token过期', 401
        except jwt.InvalidTokenError:
            return '无效Token', 401
    else:
        return '缺少Token', 401
会话管理方式

会话管理是登录架构中的重要组成部分,用于跟踪用户的状态。常见的会话管理方式包括基于Cookie、基于Session和基于Token的方式。

基于Cookie的方式

服务器在客户端存储会话ID,每次请求时客户端发送会话ID,服务器端使用会话ID查找会话数据。

基于Session的方式

服务器端保存会话数据,客户端每次请求携带会话ID,服务器根据会话ID从服务器端获取会话数据。

基于Token的方式

客户端保存Token,每次请求携带Token,服务器端验证Token以获取会话数据。这种方式不需要服务器端存储会话数据,减少了服务器端的存储负担。

示例代码

以下是一个基于Session的登录示例,使用Flask框架编写:

from flask import Flask, request, make_response, session

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

@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    password = request.form['password']

    # 验证用户名和密码
    if username == 'user' and password == 'password':
        session['username'] = username
        return '登录成功'
    else:
        return '登录失败'

@app.route('/')
def index():
    if 'username' in session:
        return f"欢迎, {session['username']}"
    else:
        return '未登录'

@app.route('/logout')
def logout():
    session.pop('username', None)
    return '已注销'
登录架构的设计原则
安全性

安全性是登录架构中最重要的一环,主要包括以下几个方面:

  • 密码加密:使用强加密算法(如SHA-256)对用户密码进行加密存储。
  • 防止注入攻击:输入验证,确保用户输入的数据不会导致SQL注入等安全漏洞。
  • 防止XSS攻击:使用Content Security Policy(CSP)等策略防止跨站脚本攻击。
  • 防止CSRF攻击:使用CSRF令牌防止跨站请求伪造攻击。
  • 会话管理:合理设置会话过期时间,使用HTTPS加密传输会话数据。

示例代码

以下是一个简单的防止SQL注入的示例,使用Python和SQLite数据库编写:

import sqlite3
from sqlite3 import Error

def create_connection(db_file):
    """创建数据库连接"""
    conn = None
    try:
        conn = sqlite3.connect(db_file)
    except Error as e:
        print(e)
    return conn

def insert_user(conn, user):
    """插入用户数据"""
    sql = ''' INSERT INTO users(username,password)
              VALUES(?,?) '''
    cur = conn.cursor()
    cur.execute(sql, user)
    conn.commit()
    return cur.lastrowid

def create_user_table(conn):
    """创建用户表"""
    sql_create_users_table = """CREATE TABLE IF NOT EXISTS users (
                                id integer PRIMARY KEY,
                                username text NOT NULL,
                                password text NOT NULL
                                );"""
    if conn is not None:
        try:
            c = conn.cursor()
            c.execute(sql_create_users_table)
        except Error as e:
            print(e)
    else:
        print("Error!无法创建数据库连接。")

def main():
    database = "users.db"
    conn = create_connection(database)
    with conn:
        create_user_table(conn)
        user = ('user1', 'password1')
        insert_user(conn, user)

if __name__ == '__main__':
    main()
易用性

易用性是指登录架构应该让用户能够方便地进行操作,包括但不限于:

  • 简洁的用户界面:清晰的布局和明确的操作指引。
  • 快速的响应速度:响应时间短,减少用户等待时间。
  • 友好的错误提示:当用户操作出现问题时,提供明确的错误信息。
  • 支持多种设备:适配不同屏幕尺寸和操作系统的设备。
  • 便于记忆的密码提示和重置流程:提供安全的密码找回机制。

示例代码

以下是一个简单的密码找回流程示例,使用Python和Flask框架编写:

from flask import Flask, request, render_template, redirect, flash
import random
import string

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

def generate_code(length=6):
    """生成随机验证码"""
    return ''.join(random.choices(string.ascii_uppercase + string.digits, k=length))

@app.route('/forgot_password', methods=['GET', 'POST'])
def forgot_password():
    if request.method == 'POST':
        email = request.form['email']
        # 生成验证码并发送给用户
        code = generate_code()
        # 假设此处通过邮件发送验证码
        flash('验证码已发送至您的邮箱')
        return redirect('/reset_password?email={}'.format(email))
    return render_template('forgot_password.html')

@app.route('/reset_password', methods=['GET', 'POST'])
def reset_password():
    email = request.args.get('email')
    if request.method == 'POST':
        code = request.form['code']
        new_password = request.form['new_password']
        # 验证验证码是否正确
        if code == 'generated_code':
            # 更新密码
            flash('密码已重置成功')
            return redirect('/')
        else:
            flash('验证码错误')
    return render_template('reset_password.html', email=email)

@app.route('/')
def index():
    return render_template('index.html')
可扩展性

可扩展性是指登录架构能够灵活适应用户数量、业务需求的增加或变化:

  • 模块化设计:将登录架构设计为独立模块,便于维护和扩展。
  • 兼容多种认证方式:支持OAuth、SSO等方式,提高系统灵活性。
  • 分布式部署:支持多服务器部署,提高系统的可用性和性能。
  • 可配置的参数:提供可配置的参数,便于调整和优化。
  • 支持多种协议:支持HTTP、HTTPS、WebSocket等协议,适应不同的应用场景。

示例代码

以下是一个简单的OAuth2登录示例,使用Python和Flask框架编写:

from flask import Flask, request, redirect, session
import requests

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

# OAuth2配置
client_id = 'your_client_id'
client_secret = 'your_client_secret'
redirect_uri = 'http://localhost:5000/callback'
auth_url = 'https://api.example.com/oauth/authorize'
token_url = 'https://api.example.com/oauth/token'

@app.route('/login')
def login():
    params = {
        'client_id': client_id,
        'redirect_uri': redirect_uri,
        'response_type': 'code'
    }
    return redirect(auth_url + '?' + requests.urlencode(params))

@app.route('/callback')
def callback():
    code = request.args.get('code')
    params = {
        'client_id': client_id,
        'client_secret': client_secret,
        'code': code,
        'grant_type': 'authorization_code',
        'redirect_uri': redirect_uri
    }
    response = requests.post(token_url, data=params)
    token = response.json()
    session['access_token'] = token['access_token']
    return '登录成功'

@app.route('/protected')
def protected():
    if 'access_token' in session:
        # 使用access_token访问受保护的资源
        return '欢迎访问受保护资源'
    else:
        return redirect('/login')

@app.route('/')
def index():
    return '欢迎访问首页'
构建简单登录架构的步骤
用户注册流程

用户注册流程通常包括以下步骤:

  1. 输入注册信息:用户填写用户名、密码等注册信息。
  2. 验证注册信息:检查用户名是否已存在,密码是否符合要求。
  3. 保存注册信息:将用户信息保存到数据库中。
  4. 发送确认邮件或短信:发送确认邮件或短信到用户注册的邮箱或手机号,用户需要点击确认链接完成注册。

示例代码

以下是一个简单的用户注册示例,使用Python和Flask框架编写:

from flask import Flask, request, render_template, redirect, flash
import sqlite3

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

def create_connection(db_file):
    """创建数据库连接"""
    conn = None
    try:
        conn = sqlite3.connect(db_file)
    except Error as e:
        print(e)
    return conn

def insert_user(conn, user):
    """插入用户数据"""
    sql = ''' INSERT INTO users(username,password)
              VALUES(?,?) '''
    cur = conn.cursor()
    cur.execute(sql, user)
    conn.commit()
    return cur.lastrowid

def create_user_table(conn):
    """创建用户表"""
    sql_create_users_table = """CREATE TABLE IF NOT EXISTS users (
                                id integer PRIMARY KEY,
                                username text NOT NULL,
                                password text NOT NULL
                                );"""
    if conn is not None:
        try:
            c = conn.cursor()
            c.execute(sql_create_users_table)
        except Error as e:
            print(e)
    else:
        print("Error!无法创建数据库连接。")

@app.route('/register', methods=['GET', 'POST'])
def register():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        # 验证用户名是否已存在
        conn = create_connection('users.db')
        cur = conn.cursor()
        cur.execute("SELECT * FROM users WHERE username=?", (username,))
        if cur.fetchone():
            flash("用户名已存在")
            return redirect('/register')
        else:
            # 插入用户数据
            insert_user(conn, (username, password))
            flash("注册成功")
            return redirect('/')
    return render_template('register.html')

@app.route('/')
def home():
    return render_template('home.html')

if __name__ == '__main__':
    app.run(debug=True)
用户登录流程

用户登录流程通常包括以下步骤:

  1. 输入登录信息:用户输入用户名和密码。
  2. 验证登录信息:检查用户信息是否正确。
  3. 记录登录状态:成功登录后,记录用户的登录状态,例如通过Cookie或Session。
  4. 跳转到目标页面:登录成功后,跳转到用户请求的目标页面或首页。

示例代码

以下是一个简单的用户登录示例,使用Python和Flask框架编写:

from flask import Flask, request, session, redirect, render_template
import sqlite3

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

def create_connection(db_file):
    """创建数据库连接"""
    conn = None
    try:
        conn = sqlite3.connect(db_file)
    except Error as e:
        print(e)
    return conn

def get_user(conn, username):
    """查询用户信息"""
    sql = ''' SELECT * FROM users WHERE username=? '''
    cur = conn.cursor()
    cur.execute(sql, (username,))
    return cur.fetchone()

@app.route('/login', methods=['GET', 'POST'])
def login():
    if request.method == 'POST':
        username = request.form['username']
        password = request.form['password']
        # 验证用户名和密码
        conn = create_connection('users.db')
        user = get_user(conn, username)
        if user and user[2] == password:
            session['username'] = username
            return redirect('/')
        else:
            flash("用户名或密码错误")
            return redirect('/login')
    return render_template('login.html')

@app.route('/logout')
def logout():
    session.pop('username', None)
    return redirect('/login')

@app.route('/')
def home():
    username = session.get('username')
    if username:
        return render_template('home.html', username=username)
    else:
        return redirect('/login')

if __name__ == '__main__':
    app.run(debug=True)
用户注销流程

用户注销流程通常包括以下步骤:

  1. 清除登录状态:注销用户时,清除用户的登录状态,例如删除Cookie或Session中的用户信息。
  2. 跳转到登录页面:注销成功后,跳转到登录页面或首页。

示例代码

以下是一个简单的用户注销示例,使用Python和Flask框架编写:

from flask import Flask, session, redirect

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

@app.route('/logout')
def logout():
    """注销用户"""
    session.pop('username', None)
    return redirect('/login')

@app.route('/login')
def login():
    """登录页面"""
    return "登录页面"

@app.route('/')
def home():
    """首页"""
    username = session.get('username')
    if username:
        return f"欢迎, {username}"
    else:
        return "未登录"

if __name__ == '__main__':
    app.run(debug=True)
常见问题及解决方法
用户忘记密码处理

用户忘记密码时,可以提供密码找回功能。常见的方案包括发送重置密码链接到用户注册的邮箱或手机号。

示例代码

以下是一个简单的密码找回流程示例,使用Python和Flask框架编写:

from flask import Flask, request, render_template, redirect, flash
import random
import string

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

def generate_code(length=6):
    """生成随机验证码"""
    return ''.join(random.choices(string.ascii_uppercase + string.digits, k=length))

@app.route('/forgot_password', methods=['GET', 'POST'])
def forgot_password():
    if request.method == 'POST':
        email = request.form['email']
        # 生成验证码并发送给用户
        code = generate_code()
        # 假设此处通过邮件发送验证码
        flash('验证码已发送至您的邮箱')
        return redirect('/reset_password?email={}'.format(email))
    return render_template('forgot_password.html')

@app.route('/reset_password', methods=['GET', 'POST'])
def reset_password():
    email = request.args.get('email')
    if request.method == 'POST':
        code = request.form['code']
        new_password = request.form['new_password']
        # 验证验证码是否正确
        if code == 'generated_code':
            # 更新密码
            flash('密码已重置成功')
            return redirect('/')
        else:
            flash('验证码错误')
    return render_template('reset_password.html', email=email)

@app.route('/')
def index():
    return render_template('index.html')
重置密码流程

重置密码流程通常包括以下步骤:

  1. 输入验证码:用户输入收到的验证码。
  2. 输入新密码:用户输入新密码。
  3. 验证验证码:服务器端验证验证码是否正确。
  4. 更新密码:成功验证后,更新用户密码。
  5. 通知用户:通知用户密码重置成功。

示例代码

以下是一个简单的密码重置流程示例,使用Python和Flask框架编写:

from flask import Flask, request, render_template, redirect, flash
import random
import string

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

def generate_code(length=6):
    """生成随机验证码"""
    return ''.join(random.choices(string.ascii_uppercase + string.digits, k=length))

@app.route('/reset_password', methods=['GET', 'POST'])
def reset_password():
    email = request.args.get('email')
    if request.method == 'POST':
        code = request.form['code']
        new_password = request.form['new_password']
        # 验证验证码是否正确
        if code == 'generated_code':
            # 更新密码
            flash('密码已重置成功')
            return redirect('/')
        else:
            flash('验证码错误')
    return render_template('reset_password.html', email=email)

@app.route('/')
def index():
    return render_template('index.html')
密码加密与保护

密码加密与保护是确保用户数据安全的重要措施。常用的密码加密方法包括:

  • 哈希加密:使用SHA-256、bcrypt等密码哈希算法对密码进行加密存储。
  • 盐值加密:在哈希过程中加入随机生成的盐值,增加密码破解难度。
  • 密钥加密:使用AES等对称加密算法对密码进行加密存储。

示例代码

以下是一个简单的密码加密示例,使用Python编写:

import hashlib
import bcrypt

def hash_password(password):
    """使用SHA-256哈希函数来加密密码"""
    return hashlib.sha256(password.encode()).hexdigest()

def bcrypt_hash_password(password):
    """使用bcrypt对密码进行加密"""
    salt = bcrypt.gensalt()
    hashed_password = bcrypt.hashpw(password.encode(), salt)
    return hashed_password

def verify_password(hashed_password, provided_password):
    """验证提供的密码是否与存储的哈希密码匹配"""
    return bcrypt.checkpw(provided_password.encode(), hashed_password)

# 假设存储的密码哈希为
stored_password_hash = bcrypt.hashpw(b'password', bcrypt.gensalt())

provided_password = input("请输入密码: ")
hashed_password = bcrypt_hash_password(provided_password)

if verify_password(stored_password_hash, provided_password):
    print("登录成功")
else:
    print("密码错误")

示例代码

以下是一个简单的盐值加密示例,使用Python编写:

import hashlib
import os

def generate_salt():
    """生成随机盐值"""
    return os.urandom(16)

def hash_password(password, salt):
    """将密码和盐值组合后进行哈希"""
    return hashlib.sha256(password.encode() + salt).hexdigest()

def verify_password(stored_password_hash, password, salt):
    """验证提供的密码是否与存储的哈希密码匹配"""
    return stored_password_hash == hash_password(password, salt)

# 生成盐值
salt = generate_salt()

# 假设存储的密码哈希为
stored_password_hash = hash_password('password', salt)

provided_password = input("请输入密码: ")
hashed_password = hash_password(provided_password, salt)

if verify_password(stored_password_hash, provided_password, salt):
    print("登录成功")
else:
    print("密码错误")
测试与部署
登录架构的测试方法

登录架构的测试通常包括以下几个方面:

  • 功能测试:测试登录、注册、注销等基本功能是否正常。
  • 安全性测试:测试系统是否能够抵御SQL注入、XSS攻击等安全漏洞。
  • 性能测试:测试系统在高并发情况下的性能表现。
  • 兼容性测试:测试系统在不同浏览器和设备上的表现。
  • 用户体验测试:测试用户界面的易用性和交互性。

示例代码

以下是一个简单的登录功能测试示例,使用Python和pytest框架编写:

import pytest
from flask import Flask, request, session
from flask_login import login_user

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

@app.route('/login', methods=['POST'])
def login():
    username = request.form['username']
    password = request.form['password']
    # 验证用户名和密码
    if username == 'user' and password == 'password':
        login_user(username)
        return '登录成功'
    else:
        return '登录失败'

@pytest.fixture
def client():
    """创建测试客户端"""
    with app.test_client() as client:
        yield client

def test_login_success(client):
    """测试成功登录"""
    response = client.post('/login', data=dict(username='user', password='password'))
    assert response.status_code == 200
    assert b'登录成功' in response.data

def test_login_failure(client):
    """测试失败登录"""
    response = client.post('/login', data=dict(username='user', password='wrongpassword'))
    assert response.status_code == 200
    assert b'登录失败' in response.data
环境部署与上线流程

部署登录架构时,通常需要遵循以下步骤:

  • 环境准备:确保服务器环境符合应用要求,包括操作系统、数据库、Web服务器等。
  • 代码部署:将应用代码部署到服务器,通常使用版本控制工具如Git进行代码管理。
  • 数据库迁移:将数据库迁移脚本应用到生产环境,确保数据库结构和数据的一致性。
  • 配置调整:调整应用配置文件,确保配置项与生产环境一致。
  • 启动服务:启动应用服务,确保应用能够正常运行。
  • 监控与维护:部署后,需要进行监控,确保应用稳定运行,并及时处理可能出现的问题。

示例代码

以下是一个简单的Docker部署示例,使用Dockerfile和docker-compose编写:

# Dockerfile
FROM python:3.8-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run", "--host=0.0.0.0"]

```docker-compose.yml

docker-compose.yml

version: '3'
services:
web:
build: .
ports:

  • "5000:5000"
    environment:
  • FLASK_APP=app.py
  • FLASK_ENV=production
    depends_on:
  • db
    db:
    image: postgres:11.5-alpine
    environment:
    POSTGRES_USER: user
    POSTGRES_PASSWORD: password
    POSTGRES_DB: mydb
使用工具与技巧

部署和维护登录架构时,可以使用以下工具和技巧:

  • Docker:使用Docker容器化应用,提高部署效率。
  • Kubernetes:使用Kubernetes进行应用的自动化部署和管理。
  • CI/CD:使用Jenkins、GitLab CI等持续集成/持续部署工具进行自动化测试和部署。
  • 监控工具:使用Prometheus、Grafana等工具进行应用监控和性能分析。
  • 日志管理:使用ELK(Elasticsearch、Logstash、Kibana)或ELKstack进行日志收集和分析。
  • 安全扫描:使用OWASP ZAP等工具进行安全漏洞扫描。

示例代码

以下是一个简单的Docker Compose部署示例,使用Dockerfile和docker-compose.yml编写:

# Dockerfile
FROM python:3.8-alpine
WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
CMD ["flask", "run", "--host=0.0.0.0"]

```docker-compose.yml

docker-compose.yml

version: '3'
services:
web:
build: .
ports:

  • "5000:5000"
    environment:
  • FLASK_APP=app.py
  • FLASK_ENV=production
    depends_on:
  • db
    db:
    image: postgres:11.5-alpine
    environment:
    POSTGRES_USER: user
    POSTGRES_PASSWORD: password
    POSTGRES_DB: mydb

通过这些工具,可以简化部署流程,提高部署效率,同时保障应用的安全性和稳定性。

这篇关于登录架构入门指南:轻松搭建安全的登录系统的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!