모든 기기에서 로그아웃 추가
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!!))
|
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")
|
@GetMapping("/info")
|
||||||
fun getMemberInfo(
|
fun getMemberInfo(
|
||||||
@RequestParam container: String?,
|
@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 {
|
private fun getOrCreateLock(memberId: Long): ReentrantReadWriteLock {
|
||||||
return tokenLocks.computeIfAbsent(memberId) { ReentrantReadWriteLock() }
|
return tokenLocks.computeIfAbsent(memberId) { ReentrantReadWriteLock() }
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue