[👷] JWT 인증 도입해 로그인 로직 변경

This commit is contained in:
김선규 2025-02-25 17:32:32 +09:00
parent 4b32aee2a4
commit f4233f4562
9 changed files with 31 additions and 26 deletions

View File

@ -27,8 +27,8 @@ struct NavigationView: View {
LoginView()
case .Register(let type, let id):
RegisterView(type: type, snsID: id)
case .SelectAcademy(let bids):
SelectAcademyView(bids: bids)
case .SelectAcademy:
SelectAcademyView()
case .Main:
MainView()
case .ChatRoom(let id):

View File

@ -36,7 +36,7 @@ struct LoginView: View {
// MARK: - TODO,
// appVM.naviState.set(act: .ADD, path: .SelectAcademy(bids: ["AA0000", "AA0001"]))
loginVM.toggleLoading = true
loginVM.loginTest(type: .Apple, id: "12345678")
loginVM.loginTest(type: .Kakao, id: "TestSNSID1")
} label: {
makeButton(image: Image(.Logo.appleIcon), color: Color(.Text.black), "애플 계정으로 시작하기")

View File

@ -12,8 +12,7 @@ struct SelectAcademyView: View {
@StateObject var saVM = SelectAcademyViewModel()
@State private var scrollOffset: CGPoint = .zero
var bids: [String]
var body: some View {
VStack(spacing: 0) {
@ -84,7 +83,7 @@ struct SelectAcademyView: View {
}
.onAppear {
saVM.loadAcademy(bids: bids)
saVM.loadAcademy()
}
}
}

View File

@ -73,9 +73,10 @@ class VersionData: Codable {
// /api/v1/in/user/login ----------------
class User_Academy: Codable {
let uid: String
let bid: [String]
class User_Token: Codable {
let token: String
let refresh: String
// let bids: [String]
}
// /api/v1/in/member/academy ----------------

View File

@ -43,7 +43,7 @@ enum PathName: Hashable {
case Intro
case Login
case Register(_ type: SNSLoginType, id: String)
case SelectAcademy(bids: [String])
case SelectAcademy
case Main
case ChatRoom(id: String)
case NONE

View File

@ -24,7 +24,7 @@ class LoginViewModel: ObservableObject {
"acctype": "\(type == .Apple ? "ST00": "ST01")",
"sns_id": "\(id)"
],
decodingType: APIResponse<User_Academy>.self)
decodingType: APIResponse<User_Token>.self)
.sink { [weak self] completion in
// API
switch completion {
@ -36,16 +36,19 @@ class LoginViewModel: ObservableObject {
}
} receiveValue: { [weak self] response in
guard let self = self else { return }
guard let userAcademy = response as? APIResponse<User_Academy> else {return}
switch userAcademy.status.code {
guard let userToken = response as? APIResponse<User_Token> else {return}
switch userToken.status.code {
case .success:
if let bids = userAcademy.data.toStringDict()["bid"] {
printLog(bids)
if let bidArray: [String] = jsonToSwift(bids) {
self.pathName = .SelectAcademy(bids: bidArray)
} else {
printLog("JSON 변환 실패")
}
@UserDefault(key: "token", defaultValue: "accToken") var accToken
@UserDefault(key: "refresh", defaultValue: "arefreshToken") var refreshToken
if let token = userToken.data.toStringDict()["token"],
let refresh = userToken.data.toStringDict()["refresh"] {
printLog(token)
printLog(refresh)
accToken = token
refreshToken = refresh
self.pathName = .SelectAcademy
}
case .anything(let apiCode):
// MARK: TO-DO
@ -69,7 +72,7 @@ class LoginViewModel: ObservableObject {
"acctype": "\(type == .Apple ? "ST00": "ST01")",
"sns_id": "\(snsId.snsId)"
],
decodingType: APIResponse<User_Academy>.self)
decodingType: APIResponse<User_Token>.self)
}
.sink { [weak self] completion in
@ -82,11 +85,11 @@ class LoginViewModel: ObservableObject {
}
} receiveValue: { [weak self] response in
guard let self = self else { return }
guard let userAcademy = response as? APIResponse<User_Academy> else {return}
guard let userAcademy = response as? APIResponse<User_Token> else {return}
if let bids = userAcademy.data.toStringDict()["bid"] {
printLog(bids)
if let bidArray: [String] = jsonToSwift(bids) {
self.pathName = .SelectAcademy(bids: bidArray)
self.pathName = .SelectAcademy
} else {
printLog("JSON 변환 실패")
}

View File

@ -15,11 +15,13 @@ class SelectAcademyViewModel: ObservableObject {
@Published var academyList: [AcademyName] = []
@Published var selectNum: Int = -1
func loadAcademy(bids: [String]) {
func loadAcademy() {
@UserDefault(key: "token", defaultValue: "accToken") var token
@UserDefault(key: "refresh", defaultValue: "arefreshToken") var refresh
loadAPIData(url: "\(API_URL)",
path: "/api/v1/in/user/academy",
method: .post,
parameters: ["bids": bids],
method: .get,
parameters: ["token": token, "refresh": refresh],
decodingType: APIResponse<[AcademyName]>.self)
.sink { completion in
switch completion {