cgi和sqlite3实现登录返回token
时间: 2023-10-05 18:06:30 浏览: 97
sqlite实现登录
CGI(Common Gateway Interface)是一种标准的 Web 服务器和应用程序之间的接口,可以实现动态网页的生成。而 SQLite3 是一种轻量级的嵌入式数据库,可以用于存储和管理应用程序的数据。
在这里,我将向你介绍如何使用 CGI 和 SQLite3 实现登录并返回 Token。
首先,你需要创建一个 SQLite3 数据库,用于存储用户信息和 Token。你可以使用以下命令创建一个名为 "users.db" 的数据库:
```
$ sqlite3 users.db
```
然后,你可以使用以下 SQL 命令创建一个名为 "users" 的表,用于存储用户信息和 Token:
```sql
CREATE TABLE users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
username TEXT NOT NULL,
password TEXT NOT NULL,
token TEXT
);
```
接下来,你可以使用 Python 编写一个 CGI 脚本,实现登录并返回 Token 的功能。以下是一个示例脚本:
```python
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import cgi
import hashlib
import random
import sqlite3
import json
# 连接数据库
conn = sqlite3.connect('users.db')
c = conn.cursor()
# 获取表单数据
form = cgi.FieldStorage()
username = form.getvalue('username')
password = form.getvalue('password')
# 生成 Token
def generate_token():
return hashlib.sha256(str(random.getrandbits(256)).encode('utf-8')).hexdigest()
# 验证用户名和密码
def authenticate(username, password):
c.execute("SELECT password FROM users WHERE username=?", (username,))
result = c.fetchone()
if result and result[0] == hashlib.sha256(password.encode('utf-8')).hexdigest():
return True
else:
return False
# 更新 Token
def update_token(username):
token = generate_token()
c.execute("UPDATE users SET token=? WHERE username=?", (token, username))
conn.commit()
return token
# 登录
def login(username, password):
if authenticate(username, password):
token = update_token(username)
return {'success': True, 'token': token}
else:
return {'success': False, 'message': '用户名或密码错误'}
# 获取 Token
def get_token(username):
c.execute("SELECT token FROM users WHERE username=?", (username,))
result = c.fetchone()
if result:
return result[0]
else:
return None
# 验证 Token
def verify_token(token):
c.execute("SELECT username FROM users WHERE token=?", (token,))
result = c.fetchone()
if result:
return True
else:
return False
# 处理请求
if 'username' in form and 'password' in form:
result = login(username, password)
print('Content-Type: application/json')
print()
print(json.dumps(result))
elif 'token' in form:
token = form.getvalue('token')
if verify_token(token):
print('Content-Type: application/json')
print()
print(json.dumps({'success': True}))
else:
print('Content-Type: application/json')
print()
print(json.dumps({'success': False, 'message': 'Token 验证失败'}))
else:
print('Content-Type: text/plain')
print()
print('请提供用户名和密码或 Token')
```
该脚本接收两种请求:
1. 用户名和密码:如果请求包含用户名和密码,则尝试进行登录,并返回 Token。
2. Token:如果请求包含 Token,则验证 Token 的合法性。
如果登录成功,则会在数据库中更新用户的 Token,并将 Token 返回给客户端。如果 Token 验证失败,则返回错误信息。
请注意,这只是一个简单的示例脚本,你需要根据自己的实际情况进行修改和优化。例如,你需要在生产环境中使用 HTTPS 协议,以确保数据传输的安全性。
阅读全文