Files
whale-town-front/scripts/managers/StorageService.gd
lzdFeiFei d623c705b6 feat:实现登录系统和用户认证功能
- 添加登录场景(login_scene.tscn)和主菜单场景(main_menu_scene.tscn)
- 实现认证管理器(AuthManager)用于用户登录和会话管理
- 添加核心服务:加密服务、存储服务、网络服务
- 配置项目主场景为登录场景
- 添加自动加载服务到项目配置
- 添加开发环境配置(VSCode、Claude)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-23 01:15:33 +08:00

125 lines
3.4 KiB
GDScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
extends Node
## 存储服务
## 负责本地配置的读写包括用户账号、密码、Token 等
# 配置文件路径
const CONFIG_PATH: String = "user://user_config.cfg"
# ConfigFile 实例
var _config: ConfigFile
func _ready():
_config = ConfigFile.new()
_loadConfig()
## 加载配置文件
func _loadConfig() -> void:
var error = _config.load(CONFIG_PATH)
if error != OK and error != ERR_FILE_NOT_FOUND:
push_error("加载配置文件失败: " + str(error))
## 保存配置文件
func _saveConfig() -> void:
var error = _config.save(CONFIG_PATH)
if error != OK:
push_error("保存配置文件失败: " + str(error))
## 保存键值对
func save(section: String, key: String, value: Variant) -> void:
_config.set_value(section, key, value)
_saveConfig()
## 读取值
func getValue(section: String, key: String, defaultValue: Variant = null) -> Variant:
return _config.get_value(section, key, defaultValue)
## 保存账号信息(包括加密的密码)
func saveAccount(username: String, password: String, remember: bool) -> void:
save("account", "last_username", username)
if remember and not password.is_empty():
# 加密密码后保存
var encryptedPassword = EncryptionService.encrypt(password)
save("account", "saved_password", encryptedPassword)
save("account", "remember_password", true)
else:
# 不记住密码,清除保存的密码
clearSavedPassword()
## 读取保存的账号信息
func loadAccount() -> Dictionary:
var username = getValue("account", "last_username", "")
var rememberPassword = getValue("account", "remember_password", false)
var encryptedPassword = getValue("account", "saved_password", "")
var result = {
"username": username,
"remember_password": rememberPassword
}
# 如果记住密码,解密密码
if rememberPassword and not encryptedPassword.is_empty():
var decryptedPassword = EncryptionService.decrypt(encryptedPassword)
result["password"] = decryptedPassword
else:
result["password"] = ""
return result
## 清除保存的密码
func clearSavedPassword() -> void:
save("account", "saved_password", "")
save("account", "remember_password", false)
## 保存 Token
func saveToken(token: String, expireTime: int = 0) -> void:
save("auth", "token", token)
save("auth", "expire_time", expireTime)
## 读取 Token
func loadToken() -> Dictionary:
var token = getValue("auth", "token", "")
var expireTime = getValue("auth", "expire_time", 0)
return {
"token": token,
"expire_time": expireTime
}
## 清除 Token
func clearToken() -> void:
save("auth", "token", "")
save("auth", "expire_time", 0)
## 保存用户信息
func saveUserData(userData: UserData) -> void:
if userData == null:
return
save("user", "id", userData.id)
save("user", "username", userData.username)
save("user", "email", userData.email)
save("user", "level", userData.level)
save("user", "exp", userData.exp)
save("user", "avatar_url", userData.avatarUrl)
## 读取用户信息
func loadUserData() -> UserData:
var userData = UserData.new()
userData.id = str(getValue("user", "id", ""))
userData.username = getValue("user", "username", "")
userData.email = getValue("user", "email", "")
userData.level = getValue("user", "level", 1)
userData.exp = getValue("user", "exp", 0)
userData.avatarUrl = getValue("user", "avatar_url", "")
return userData if not userData.id.is_empty() else null
## 清除所有用户数据
func clearAll() -> void:
clearSavedPassword()
clearToken()
_config.clear()
_saveConfig()