parent
157e3a39b6
commit
68472b234e
|
@ -7,7 +7,9 @@ import kr.co.vividnext.sodalive.member.MemberRepository
|
|||
import kr.co.vividnext.sodalive.member.MemberRole
|
||||
import kr.co.vividnext.sodalive.member.login.LoginRequest
|
||||
import kr.co.vividnext.sodalive.member.login.LoginResponse
|
||||
import kr.co.vividnext.sodalive.member.token.MemberToken
|
||||
import kr.co.vividnext.sodalive.member.token.MemberTokenRepository
|
||||
import kr.co.vividnext.sodalive.v2.MemberTokenRepositoryV2
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
|
||||
|
@ -22,6 +24,7 @@ import kotlin.concurrent.write
|
|||
class CreatorAdminMemberService(
|
||||
private val repository: MemberRepository,
|
||||
private val tokenRepository: MemberTokenRepository,
|
||||
private val tokenRepositoryV2: MemberTokenRepositoryV2,
|
||||
private val tokenProvider: TokenProvider,
|
||||
private val authenticationManagerBuilder: AuthenticationManagerBuilder,
|
||||
|
||||
|
@ -47,14 +50,30 @@ class CreatorAdminMemberService(
|
|||
|
||||
val lock = getOrCreateLock(memberId = memberId)
|
||||
lock.write {
|
||||
val memberToken = tokenRepository.findByIdOrNull(memberId)
|
||||
?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
val memberToken = saveAndGetTokenById(memberId)
|
||||
|
||||
memberToken.tokenSet.remove(token)
|
||||
tokenRepository.save(memberToken)
|
||||
if (memberToken != null) {
|
||||
memberToken.tokenSet.remove(token)
|
||||
tokenRepositoryV2.save(memberToken)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveAndGetTokenById(id: Long): MemberToken? {
|
||||
var memberToken = tokenRepositoryV2.findByIdOrNull(id = id)
|
||||
|
||||
if (memberToken == null) {
|
||||
memberToken = tokenRepository.findByIdOrNull(id = id)
|
||||
|
||||
if (memberToken != null) {
|
||||
tokenRepositoryV2.save(memberToken)
|
||||
tokenRepository.delete(memberToken)
|
||||
}
|
||||
}
|
||||
|
||||
return memberToken
|
||||
}
|
||||
|
||||
private fun login(email: String, password: String): LoginResponse {
|
||||
val member = repository.findByEmail(email = email) ?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
if (!member.isActive) {
|
||||
|
|
|
@ -13,6 +13,7 @@ import kr.co.vividnext.sodalive.member.MemberAdapter
|
|||
import kr.co.vividnext.sodalive.member.MemberRepository
|
||||
import kr.co.vividnext.sodalive.member.token.MemberToken
|
||||
import kr.co.vividnext.sodalive.member.token.MemberTokenRepository
|
||||
import kr.co.vividnext.sodalive.v2.MemberTokenRepositoryV2
|
||||
import org.slf4j.LoggerFactory
|
||||
import org.springframework.beans.factory.InitializingBean
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
|
@ -35,7 +36,8 @@ class TokenProvider(
|
|||
@Value("\${jwt.token-validity-in-seconds}")
|
||||
private val tokenValidityInSeconds: Long,
|
||||
private val repository: MemberRepository,
|
||||
private val tokenRepository: MemberTokenRepository
|
||||
private val tokenRepository: MemberTokenRepository,
|
||||
private val tokenRepositoryV2: MemberTokenRepositoryV2
|
||||
) : InitializingBean {
|
||||
|
||||
private val logger = LoggerFactory.getLogger(TokenProvider::class.java)
|
||||
|
@ -65,11 +67,11 @@ class TokenProvider(
|
|||
|
||||
val lock = getOrCreateLock(memberId = memberId)
|
||||
lock.write {
|
||||
val memberToken = tokenRepository.findByIdOrNull(memberId)
|
||||
val memberToken = saveAndGetTokenById(memberId)
|
||||
?: MemberToken(id = memberId)
|
||||
|
||||
memberToken.tokenSet.add(token)
|
||||
tokenRepository.save(memberToken)
|
||||
tokenRepositoryV2.save(memberToken)
|
||||
}
|
||||
|
||||
return token
|
||||
|
@ -84,7 +86,7 @@ class TokenProvider(
|
|||
.body
|
||||
|
||||
val authorities = claims[AUTHORITIES_KEY].toString().split(",").map { SimpleGrantedAuthority(it) }
|
||||
val memberToken = tokenRepository.findByIdOrNull(id = claims.subject.toLong())
|
||||
val memberToken = saveAndGetTokenById(id = claims.subject.toLong())
|
||||
?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
||||
if (!memberToken.tokenSet.contains(token)) throw SodaException("로그인 정보를 확인해주세요.")
|
||||
|
@ -96,6 +98,21 @@ class TokenProvider(
|
|||
return UsernamePasswordAuthenticationToken(principal, token, authorities)
|
||||
}
|
||||
|
||||
private fun saveAndGetTokenById(id: Long): MemberToken? {
|
||||
var memberToken = tokenRepositoryV2.findByIdOrNull(id = id)
|
||||
|
||||
if (memberToken == null) {
|
||||
memberToken = tokenRepository.findByIdOrNull(id = id)
|
||||
|
||||
if (memberToken != null) {
|
||||
tokenRepositoryV2.save(memberToken)
|
||||
tokenRepository.delete(memberToken)
|
||||
}
|
||||
}
|
||||
|
||||
return memberToken
|
||||
}
|
||||
|
||||
fun validateToken(token: String): Boolean {
|
||||
try {
|
||||
Jwts.parserBuilder()
|
||||
|
|
|
@ -35,9 +35,11 @@ import kr.co.vividnext.sodalive.member.stipulation.StipulationIds
|
|||
import kr.co.vividnext.sodalive.member.stipulation.StipulationRepository
|
||||
import kr.co.vividnext.sodalive.member.tag.MemberCreatorTag
|
||||
import kr.co.vividnext.sodalive.member.tag.MemberTagRepository
|
||||
import kr.co.vividnext.sodalive.member.token.MemberToken
|
||||
import kr.co.vividnext.sodalive.member.token.MemberTokenRepository
|
||||
import kr.co.vividnext.sodalive.utils.generateFileName
|
||||
import kr.co.vividnext.sodalive.utils.generatePassword
|
||||
import kr.co.vividnext.sodalive.v2.MemberTokenRepositoryV2
|
||||
import org.springframework.beans.factory.annotation.Value
|
||||
import org.springframework.data.repository.findByIdOrNull
|
||||
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken
|
||||
|
@ -62,6 +64,7 @@ import kotlin.concurrent.write
|
|||
class MemberService(
|
||||
private val repository: MemberRepository,
|
||||
private val tokenRepository: MemberTokenRepository,
|
||||
private val tokenRepositoryV2: MemberTokenRepositoryV2,
|
||||
private val stipulationRepository: StipulationRepository,
|
||||
private val stipulationAgreeRepository: StipulationAgreeRepository,
|
||||
private val creatorFollowingRepository: CreatorFollowingRepository,
|
||||
|
@ -435,11 +438,12 @@ class MemberService(
|
|||
|
||||
val lock = getOrCreateLock(memberId = memberId)
|
||||
lock.write {
|
||||
val memberToken = tokenRepository.findByIdOrNull(memberId)
|
||||
?: throw SodaException("로그인 정보를 확인해주세요.")
|
||||
val memberToken = saveAndGetTokenById(memberId)
|
||||
|
||||
memberToken.tokenSet.remove(token)
|
||||
tokenRepository.save(memberToken)
|
||||
if (memberToken != null) {
|
||||
memberToken.tokenSet.remove(token)
|
||||
tokenRepositoryV2.save(memberToken)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -451,7 +455,25 @@ class MemberService(
|
|||
member.pushToken = null
|
||||
|
||||
val lock = getOrCreateLock(memberId = memberId)
|
||||
lock.write { tokenRepository.deleteById(memberId) }
|
||||
lock.write {
|
||||
tokenRepository.deleteById(memberId)
|
||||
tokenRepositoryV2.deleteById(memberId)
|
||||
}
|
||||
}
|
||||
|
||||
private fun saveAndGetTokenById(id: Long): MemberToken? {
|
||||
var memberToken = tokenRepositoryV2.findByIdOrNull(id = id)
|
||||
|
||||
if (memberToken == null) {
|
||||
memberToken = tokenRepository.findByIdOrNull(id = id)
|
||||
|
||||
if (memberToken != null) {
|
||||
tokenRepositoryV2.save(memberToken)
|
||||
tokenRepository.delete(memberToken)
|
||||
}
|
||||
}
|
||||
|
||||
return memberToken
|
||||
}
|
||||
|
||||
@Transactional
|
||||
|
|
|
@ -5,4 +5,4 @@ import org.springframework.data.repository.CrudRepository
|
|||
import org.springframework.stereotype.Repository
|
||||
|
||||
@Repository
|
||||
interface NewMemberTokenRepository : CrudRepository<MemberToken, Long>
|
||||
interface MemberTokenRepositoryV2 : CrudRepository<MemberToken, Long>
|
Loading…
Reference in New Issue