Python实现登录注册接口加Token验证
整体流程
步骤 | 描述 |
---|---|
1. 创建数据库 | 创建一个MySQL数据库用于存储用户信息和Token |
2. 创建表格 | 在数据库中创建一个用户表格用于存储用户的登录信息 |
3. 注册接口 | 实现用户注册接口,将用户信息插入数据库 |
4. 登录接口 | 实现用户登录接口,验证用户信息并生成Token |
5. Token验证 | 在每个需要身份验证的请求中,验证请求头中的Token |
详细步骤
1. 创建数据库
首先,我们需要创建一个MySQL数据库来存储用户信息和Token。可以使用以下代码来创建数据库:
import mysql.connector
# 连接数据库
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword"
)
# 创建数据库
mycursor = mydb.cursor()
mycursor.execute("CREATE DATABASE mydatabase")
2. 创建表格
在创建好数据库后,我们需要在数据库中创建一个用户表格来存储用户的登录信息。可以使用以下代码来创建表格:
import mysql.connector
# 连接数据库
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
# 创建表格
mycursor = mydb.cursor()
mycursor.execute("CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY, username VARCHAR(255), password VARCHAR(255))")
3. 注册接口
接下来,我们需要实现一个用户注册接口,将用户信息插入到数据库中。可以使用以下代码来实现注册接口:
from flask import Flask, request
import mysql.connector
app = Flask(__name__)
# 连接数据库
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
# 注册接口
@app.route('/register', methods=['POST'])
def register():
username = request.form['username']
password = request.form['password']
# 将用户信息插入数据库
mycursor = mydb.cursor()
sql = "INSERT INTO users (username, password) VALUES (%s, %s)"
val = (username, password)
mycursor.execute(sql, val)
mydb.commit()
return "User registered successfully"
if __name__ == '__main__':
app.run()
4. 登录接口
现在,我们需要实现一个用户登录接口,验证用户信息并生成Token。可以使用以下代码来实现登录接口:
from flask import Flask, request, jsonify
import mysql.connector
import jwt
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
# 连接数据库
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
# 登录接口
@app.route('/login', methods=['POST'])
def login():
username = request.form['username']
password = request.form['password']
# 查询数据库中是否存在匹配的用户名和密码
mycursor = mydb.cursor()
sql = "SELECT * FROM users WHERE username = %s AND password = %s"
val = (username, password)
mycursor.execute(sql, val)
user = mycursor.fetchone()
if user:
# 生成Token
token = jwt.encode({'username': username}, app.config['SECRET_KEY'], algorithm='HS256')
return jsonify({'token': token.decode('utf-8')})
else:
return jsonify({'error': 'Invalid username or password'})
if __name__ == '__main__':
app.run()
5. Token验证
最后,我们需要在每个需要身份验证的请求中验证请求头中的Token。可以使用以下代码来实现Token验证:
from flask import Flask, request, jsonify
import mysql.connector
import jwt
app = Flask(__name__)
app.config['SECRET_KEY'] = 'your_secret_key'
# 连接数据库
mydb = mysql.connector.connect(
host="localhost",
user="yourusername",
password="yourpassword",
database="mydatabase"
)
# 验证Token的装饰器
def token_required(f):
@wraps(f)
def decorated(*args, **kwargs):
token = request.headers.get('Authorization')
if not token:
return jsonify({'error': 'Token is missing'})
try:
# 验证Token
data = jwt.decode(token, app.config['SECRET_KEY'], algorithms=['HS256'])
current_user = data['username']
except: