모든 기기에서 로그아웃 추가
This commit is contained in:
parent
16c5c5f6b6
commit
0c106540cd
|
@ -40,6 +40,15 @@ class MemberController(private val service: MemberService) {
|
|||
ApiResponse.ok(service.logout(token.removePrefix("Bearer "), member.id!!))
|
||||
}
|
||||
|
||||
@PostMapping("/logout/all")
|
||||
fun logoutAll(
|
||||
@AuthenticationPrincipal(expression = "#this == 'anonymousUser' ? null : member") member: Member?
|
||||
) = run {
|
||||
if (member == null) throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
ApiResponse.ok(service.logoutAll(member.id!!))
|
||||
}
|
||||
|
||||
@GetMapping("/info")
|
||||
fun getMemberInfo(
|
||||
@RequestParam container: String?,
|
||||
|
|
|
@ -376,6 +376,17 @@ class MemberService(
|
|||
}
|
||||
}
|
||||
|
||||
@Transactional
|
||||
fun logoutAll(memberId: Long) {
|
||||
val member = repository.findByIdOrNull(memberId)
|
||||
?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
member.pushToken = null
|
||||
|
||||
val lock = getOrCreateLock(memberId = memberId)
|
||||
lock.write { tokenRepository.deleteById(memberId) }
|
||||
}
|
||||
|
||||
private fun getOrCreateLock(memberId: Long): ReentrantReadWriteLock {
|
||||
return tokenLocks.computeIfAbsent(memberId) { ReentrantReadWriteLock() }
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue