[] 계정 토큰 관리 방법 변경에 따른 로직 추가

This commit is contained in:
김선규 2025-03-14 17:37:31 +09:00
parent a825ff927e
commit 195298dea1
6 changed files with 67 additions and 1 deletions

View File

@ -10,6 +10,7 @@ import SwiftUI
struct RegisterView: View { struct RegisterView: View {
@EnvironmentObject var appVM: AppViewModel @EnvironmentObject var appVM: AppViewModel
@StateObject private var topVM = TopViewModel() @StateObject private var topVM = TopViewModel()
@StateObject var btnVM = ButtonViewModel()
@State private var scrollOffset: CGPoint = .zero @State private var scrollOffset: CGPoint = .zero
@ -41,6 +42,7 @@ struct RegisterView: View {
} }
.frame(maxWidth: .infinity, maxHeight: .infinity) .frame(maxWidth: .infinity, maxHeight: .infinity)
} }
.onAppear { .onAppear {
topVM.titleName = "회원가입" topVM.titleName = "회원가입"

View File

@ -66,6 +66,13 @@ class VersionData: Codable {
} }
// /api/v1/in/app/retryAccess ----------------
class Access: Codable {
let access: String
}
// /api/v1/in/user/login ---------------- // /api/v1/in/user/login ----------------
class User_Token: Codable { class User_Token: Codable {

View File

@ -0,0 +1,16 @@
//
// CustomError.swift
// AcaMate
//
// Created by TAnine on 3/14/25.
//
import Foundation
class ACA_ERROR: Error {
let message: String
init(_ msg: String) {
message = msg
}
}

View File

@ -17,7 +17,7 @@ class SelectAcademyViewModel: ObservableObject {
func loadAcademy() { func loadAcademy() {
@UserDefault(key: "token", defaultValue: "accToken") var token @UserDefault(key: "token", defaultValue: "accToken") var token
@UserDefault(key: "refresh", defaultValue: "arefreshToken") var refresh @UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh
loadAPIData(url: "\(API_URL)", loadAPIData(url: "\(API_URL)",
path: "/api/v1/in/user/academy", path: "/api/v1/in/user/academy",
method: .get, method: .get,

View File

@ -40,4 +40,45 @@ public func loadAPIData<T: Decodable>(url: String, path: String,
} }
} }
public func reloadAccessToken() -> Future<Any, Error> {
@UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh
return Future { promise in
_ = loadAPIData(url: "\(API_URL)",
path: "/api/v1/in/app/retryAccess",
parameters: ["refresh": refresh],
decodingType: APIResponse<Access>.self)
.sink { completion in
switch completion {
case .failure(let error):
promise(.failure(error))
printLog("\(error)")
case .finished:
printLog("엑세스 토큰 재발급 완료")
break
}
} receiveValue: { response in
guard let accToken = response as? APIResponse<Access> else {
promise(.failure(ACA_ERROR("Unknown ERROR")))
return
}
switch accToken.status.code {
case .success(let code):
if code == "000" {
if let tknData = accToken.data { promise(.success(tknData)) }
}
case .inputErr(let code):
//
promise(.failure(ACA_ERROR("Refresh token ERROR(\(code), \(accToken.status.message)")))
default:
//
promise(.failure(ACA_ERROR("Unknown ERROR")))
}
}
}
}