统一身份认证系统
统一身份认证系统
在线试用
统一身份认证系统
解决方案下载
统一身份认证系统
源码授权
统一身份认证系统
产品报价
25-10-06 23:24
小明:最近我在开发一个需要用户登录的系统,想加入排行榜功能,但不知道怎么结合统一身份认证系统。
小李:你得先确保每个用户都有唯一的身份标识,这样才能在排行榜上正确显示他们的分数或排名。

小明:那具体怎么实现呢?有没有现成的方案?
小李:我们可以使用OAuth2.0或JWT作为统一身份认证的手段。用户登录后,系统会生成一个token,保存用户的ID和权限信息。
小明:明白了,那排行榜怎么和这个结合起来?
小李:每次用户完成某个操作(比如答题、比赛),就将他们的分数记录到数据库里,并关联用户ID。排行榜只需要根据用户ID查询分数即可。
小明:那你能给我一个简单的代码示例吗?

小李:当然可以。以下是一个使用Python Flask框架的简单示例,结合JWT和排行榜逻辑:
from flask import Flask, request, jsonify
from flask_jwt_extended import (
create_access_token,
jwt_required,
get_jwt_identity
)
import sqlite3
app = Flask(__name__)
# 创建数据库
def init_db():
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute('''CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, username TEXT, password TEXT)''')
c.execute('''CREATE TABLE IF NOT EXISTS scores (user_id INTEGER, score INTEGER)''')
conn.commit()
conn.close()
@app.route('/login', methods=['POST'])
def login():
username = request.json.get('username')
password = request.json.get('password')
# 简单验证
if username == 'admin' and password == '123456':
access_token = create_access_token(identity=username)
return jsonify(access_token=access_token), 200
return jsonify({"msg": "Invalid credentials"}), 401
@app.route('/submit_score', methods=['POST'])
@jwt_required()
def submit_score():
user_id = get_jwt_identity()
score = request.json.get('score')
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute("INSERT INTO scores (user_id, score) VALUES (?, ?)", (user_id, score))
conn.commit()
conn.close()
return jsonify({"msg": "Score submitted"}), 200
@app.route('/leaderboard', methods=['GET'])
def leaderboard():
conn = sqlite3.connect('users.db')
c = conn.cursor()
c.execute("SELECT user_id, MAX(score) FROM scores GROUP BY user_id ORDER BY score DESC")
results = c.fetchall()
conn.close()
return jsonify(results), 200
if __name__ == '__main__':
init_db()
app.run(debug=True)
小明:这代码看起来不错!那我可以基于这个继续扩展了。
小李:是的,你可以考虑增加缓存、分页、实时更新等功能,让排行榜更高效。
小明:谢谢你的帮助!
小李:不客气,有需要随时问我。