You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
56 lines
2.0 KiB
56 lines
2.0 KiB
package com.iflytop.handacid.app.controller;
|
|
|
|
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
|
|
import com.iflytop.handacid.app.core.state.DeviceState;
|
|
import com.iflytop.handacid.app.model.dto.LoginDTO;
|
|
import com.iflytop.handacid.common.enums.EnableStatus;
|
|
import com.iflytop.handacid.common.model.entity.User;
|
|
import com.iflytop.handacid.common.result.Result;
|
|
import com.iflytop.handacid.common.result.ResultCode;
|
|
import com.iflytop.handacid.common.service.UserService;
|
|
import io.swagger.v3.oas.annotations.Operation;
|
|
import io.swagger.v3.oas.annotations.tags.Tag;
|
|
import jakarta.validation.Valid;
|
|
import lombok.RequiredArgsConstructor;
|
|
import lombok.extern.slf4j.Slf4j;
|
|
import org.springframework.web.bind.annotation.*;
|
|
|
|
import java.util.Objects;
|
|
|
|
/**
|
|
* 认证控制
|
|
*/
|
|
@Tag(name = "\uD83D\uDD11认证")
|
|
@RestController
|
|
@RequestMapping("/api/auth")
|
|
@RequiredArgsConstructor
|
|
@Slf4j
|
|
public class AuthController {
|
|
private final UserService userService;
|
|
private final DeviceState deviceState;
|
|
|
|
@Operation(summary = "账号密码登录")
|
|
@PostMapping("/login")
|
|
public Result<User> login(@Valid @RequestBody LoginDTO loginDTO) {
|
|
User user = userService.getOne(new LambdaQueryWrapper<>(User.class).eq(User::getUsername, loginDTO.getUsername()));
|
|
if (user != null && !Objects.equals(user.getDeleted(), EnableStatus.ENABLE) && user.getPassword().equals(loginDTO.getPassword())) {
|
|
deviceState.setCurrentUser(user);
|
|
user.setPassword(null);
|
|
return Result.success(user);
|
|
}
|
|
return Result.failed(ResultCode.INVALID_CREDENTIALS);
|
|
}
|
|
|
|
@Operation(summary = "用户登出")
|
|
@PostMapping("/logout")
|
|
public Result<String> logout() {
|
|
deviceState.setCurrentUser(null);
|
|
return Result.success();
|
|
}
|
|
|
|
@Operation(summary = "获取当前登录用户")
|
|
@GetMapping("/current")
|
|
public Result<User> current() {
|
|
return Result.success(deviceState.getCurrentUser());
|
|
}
|
|
}
|