新增用户注册功能

pull/5/head
梁晨旭 2 months ago
parent deae482e48
commit cb77d713d0

@ -8,14 +8,23 @@ import javafx.scene.layout.VBox;
import javafx.stage.Stage;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import java.time.Instant;
import java.util.*;
/**
*
*/
public class ExamController {
@FXML private VBox registerPanel;
@FXML private TextField registerUsernameField;
@FXML private PasswordField registerPasswordField;
@FXML private TextField registerEmailField;
@FXML private TextField registerCodeField;
@FXML private Button sendRegisterCodeButton;
@FXML private Button verifyRegisterCodeButton;
@FXML private Label registerStatusLabel;
private final Map<String, RegisterInfo> pendingRegistratrations = new HashMap<>();
// 登录界面控件
@FXML private TextField usernameField;
@FXML private PasswordField passwordField;
@ -46,6 +55,9 @@ public class ExamController {
private final Map<String, Account> userMap = new HashMap<>();
private final EmailCodeService emailCodeService = new EmailCodeService();
private boolean emailVerified = false;
private final Map<String, RegisterInfo> pendingRegistrations = new HashMap<>();
// 常量定义
private static final int MIN_QUESTIONS = 5;
@ -60,8 +72,123 @@ public class ExamController {
if (emailStatusLabel != null) {
emailStatusLabel.setText("");
}
if (registerPanel != null) {
registerPanel.setVisible(false);
}
}
// 添加内部类用于存储注册信息
static class RegisterInfo {
final String username;
final String password;
final String email;
final String registerCode;
final Instant expireTime;
boolean codeVerified;
RegisterInfo(String username, String password, String email, String registerCode) {
this.username = username;
this.password = password;
this.email = email;
this.registerCode = registerCode;
this.expireTime = Instant.now().plusSeconds(300); // 5分钟有效期
this.codeVerified = false;
}
public boolean isExpired() {
return Instant.now().isAfter(expireTime);
}
}
// 添加注册相关方法
@FXML
private void handleRegister() {
String username = registerUsernameField.getText().trim();
String password = registerPasswordField.getText();
String email = registerEmailField.getText().trim();
if (username.isEmpty() || password.isEmpty() || email.isEmpty()) {
registerStatusLabel.setText("请填写所有字段");
registerStatusLabel.setStyle("-fx-text-fill: red;");
return;
}
if (userMap.containsKey(username)) {
registerStatusLabel.setText("用户名已存在");
registerStatusLabel.setStyle("-fx-text-fill: red;");
return;
}
try {
// 使用现有的邮箱验证码服务发送注册验证码
emailCodeService.sendCode(email);
// 生成注册码并存储待验证信息
String registerCode = String.valueOf(100000 + new Random().nextInt(900000));
pendingRegistrations.put(email, new RegisterInfo(username, password, email, registerCode));
registerStatusLabel.setText("注册验证码已发送到邮箱,请查收");
registerStatusLabel.setStyle("-fx-text-fill: green;");
} catch (Exception e) {
registerStatusLabel.setText("发送验证码失败:" + e.getMessage());
registerStatusLabel.setStyle("-fx-text-fill: red;");
}
}
@FXML
private void handleVerifyRegisterCode() {
String email = registerEmailField.getText().trim();
String code = registerCodeField.getText().trim();
if (email.isEmpty() || code.isEmpty()) {
registerStatusLabel.setText("请填写邮箱和验证码");
registerStatusLabel.setStyle("-fx-text-fill: red;");
return;
}
// 使用邮箱验证码服务验证
boolean isValid = emailCodeService.verifyCode(email, code);
if (isValid) {
// 验证通过,完成注册
RegisterInfo registerInfo = pendingRegistrations.get(email);
if (registerInfo != null) {
Level defaultLevel = Level.;
userMap.put(registerInfo.username, new Account(registerInfo.username, registerInfo.password, defaultLevel));
pendingRegistrations.remove(email); // 移除已注册的信息
registerStatusLabel.setText("注册成功!可以使用新账号登录");
registerStatusLabel.setStyle("-fx-text-fill: green;");
// 清空注册面板
registerUsernameField.clear();
registerPasswordField.clear();
registerEmailField.clear();
registerCodeField.clear();
registerPanel.setVisible(false);
} else {
registerStatusLabel.setText("注册信息已过期,请重新注册");
registerStatusLabel.setStyle("-fx-text-fill: red;");
}
} else {
registerStatusLabel.setText("验证码错误或已过期");
registerStatusLabel.setStyle("-fx-text-fill: red;");
}
}
@FXML
private void showRegisterPanel() {
if (registerPanel != null) {
registerPanel.setVisible(true);
}
}
@FXML
private void hideRegisterPanel() {
if (registerPanel != null) {
registerPanel.setVisible(false);
}
}
private void initAccounts() {
// 小学三个账号
userMap.put("张三1", new Account("张三1", "123", Level.));

Loading…
Cancel
Save