forked from AcaMate/AcaMate_iOS
[✨] 토큰 관련해서 테스트 및 기능 추가 중
This commit is contained in:
parent
195298dea1
commit
fea29d0cb8
|
@ -328,7 +328,7 @@
|
|||
SUPPORTED_PLATFORMS = "iphoneos iphonesimulator";
|
||||
SUPPORTS_MACCATALYST = NO;
|
||||
SUPPORTS_XR_DESIGNED_FOR_IPHONE_IPAD = NO;
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited) DEV";
|
||||
SWIFT_ACTIVE_COMPILATION_CONDITIONS = "DEBUG $(inherited) DEV LOCAL";
|
||||
SWIFT_EMIT_LOC_STRINGS = YES;
|
||||
SWIFT_VERSION = 5.0;
|
||||
TARGETED_DEVICE_FAMILY = 1;
|
||||
|
|
Binary file not shown.
|
@ -99,7 +99,7 @@ struct IntroView: View {
|
|||
|
||||
private func loadVersion() -> Future<VersionData, Error> {
|
||||
return Future { promise in
|
||||
loadAPIData(url: "\(API_URL)",
|
||||
APIManager.shared.loadAPIData(url: "\(API_URL)",
|
||||
path: "/api/v1/in/app/version",
|
||||
parameters: ["type":"I"],
|
||||
decodingType: APIResponse<VersionData>.self)
|
||||
|
|
|
@ -35,8 +35,10 @@ struct LoginView: View {
|
|||
Button {
|
||||
// MARK: - TODO, 애플 계정 로그인 구현
|
||||
// appVM.naviState.set(act: .ADD, path: .SelectAcademy(bids: ["AA0000", "AA0001"]))
|
||||
loginVM.toggleLoading = true
|
||||
// loginVM.toggleLoading = true
|
||||
// loginVM.loginTest(type: .Kakao, id: "TestSNSID1@#")
|
||||
loginVM.USERPAITEST()
|
||||
|
||||
|
||||
} label: {
|
||||
makeButton(image: Image(.Logo.appleIcon), color: Color(.Text.black), "애플 계정으로 시작하기")
|
||||
|
|
|
@ -17,10 +17,51 @@ class LoginViewModel: ObservableObject {
|
|||
|
||||
var bidArray: [String] = []
|
||||
|
||||
func USERPAITEST() {
|
||||
@UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh
|
||||
var acc = "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiJBTVRlc3RFbWFpbDIwMjUwMzE3IiwianRpIjoiYTQzN2Q4YjUtNzQyMi00NWVhLWFiNTktZWI2MTBkNDMwNWRlIiwiZXhwIjoxNzQyMjAwODQ3LCJpc3MiOiJBY2FNYXRlIiwiYXVkIjoiaHR0cHM6L2RldmFjYW1hdGUuaXBzdGVpbi5teWRzLm1lIn0.Y-xxdQWyu3BX_y5hlwWjAdxG5-QRZyHEgJ6T2pDkFRc"
|
||||
|
||||
refresh = "tsLeVEtZTjy8iWDvT9vf7Kv7qQr3WgPjeNkFdMb9Rv4="
|
||||
|
||||
APIManager.shared.loadAPIData(url: "\(API_URL)",
|
||||
path: "/api/v1/in/user/cancel",
|
||||
parameters: ["token": acc],
|
||||
decodingType: APIResponse<String>.self)
|
||||
.flatMap { response -> AnyPublisher<APIResponse<String>, Error> in
|
||||
switch response.status.code {
|
||||
case .inputErr(let code) where code == "101":
|
||||
return APIManager.shared.reloadAccessToken()
|
||||
.flatMap { newAcc -> AnyPublisher<APIResponse<String>, Error> in
|
||||
APIManager.shared.loadAPIData(url: "\(API_URL)",
|
||||
path: "/api/v1/in/user/cancel",
|
||||
parameters: ["token": (newAcc as! Access).access],
|
||||
decodingType: APIResponse<String>.self)
|
||||
.eraseToAnyPublisher()
|
||||
}
|
||||
.eraseToAnyPublisher()
|
||||
default:
|
||||
return Just(response)
|
||||
.setFailureType(to: Error.self)
|
||||
.eraseToAnyPublisher()
|
||||
}
|
||||
}
|
||||
.sink { completion in
|
||||
switch completion {
|
||||
case .failure(let error):
|
||||
printLog("최종 \(error)")
|
||||
case .finished:
|
||||
break
|
||||
}
|
||||
} receiveValue: { response in
|
||||
printLog("최종: \(response)")
|
||||
}
|
||||
.store(in: &cancellables)
|
||||
}
|
||||
|
||||
func loginAction(type: SNSLoginType) {
|
||||
LoginController().login(type)
|
||||
.flatMap{ snsId in
|
||||
loadAPIData(url: "\(API_URL)",
|
||||
APIManager.shared.loadAPIData(url: "\(API_URL)",
|
||||
path: "/api/v1/in/user/login",
|
||||
parameters: [
|
||||
"acctype": "\(type == .Apple ? "ST00": "ST01")",
|
||||
|
@ -42,17 +83,17 @@ class LoginViewModel: ObservableObject {
|
|||
}
|
||||
} receiveValue: { [weak self] response in
|
||||
guard let self = self else { return }
|
||||
guard let userToken = response.response as? APIResponse<User_Token> else {return}
|
||||
var snsId = response.snsId
|
||||
// let userToken = response.response // as? APIResponse<User_Token> else {return}
|
||||
let snsId = response.snsId
|
||||
|
||||
switch userToken.status.code {
|
||||
switch response.response.status.code {
|
||||
case .success(let code):
|
||||
if code == "000" {
|
||||
@UserDefault(key: "token", defaultValue: "accToken") var accToken
|
||||
@UserDefault(key: "refresh", defaultValue: "refreshToken") var refreshToken
|
||||
|
||||
if let token = userToken.data.toStringDict()["token"],
|
||||
let refresh = userToken.data.toStringDict()["refresh"] {
|
||||
if let token = response.response.data.toStringDict()["token"],
|
||||
let refresh = response.response.data.toStringDict()["refresh"] {
|
||||
printLog(token)
|
||||
printLog(refresh)
|
||||
accToken = token
|
||||
|
|
|
@ -18,7 +18,7 @@ class SelectAcademyViewModel: ObservableObject {
|
|||
func loadAcademy() {
|
||||
@UserDefault(key: "token", defaultValue: "accToken") var token
|
||||
@UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh
|
||||
loadAPIData(url: "\(API_URL)",
|
||||
APIManager.shared.loadAPIData(url: "\(API_URL)",
|
||||
path: "/api/v1/in/user/academy",
|
||||
method: .get,
|
||||
parameters: ["token": token, "refresh": refresh],
|
||||
|
|
|
@ -10,12 +10,19 @@ import Foundation
|
|||
import Combine
|
||||
|
||||
import Alamofire
|
||||
public class APIManager {
|
||||
private var cancellables = Set<AnyCancellable>()
|
||||
public static let shared = APIManager()
|
||||
|
||||
private init(cancellables: Set<AnyCancellable> = Set<AnyCancellable>()) {
|
||||
self.cancellables = cancellables
|
||||
}
|
||||
|
||||
public func loadAPIData<T: Decodable>(url: String, path: String,
|
||||
method: HTTPMethod = .get,
|
||||
parameters: [String: Any],
|
||||
headers: HTTPHeaders = [:],//["Accept": "application/json"],
|
||||
decodingType: T.Type) -> Future<Any, Error> {
|
||||
decodingType: T.Type) -> Future<T, Error> {
|
||||
let encoding: ParameterEncoding = (method == .get) ? URLEncoding.default : JSONEncoding.default
|
||||
return Future { promise in
|
||||
printLog(parameters)
|
||||
|
@ -26,24 +33,33 @@ public func loadAPIData<T: Decodable>(url: String, path: String,
|
|||
headers: headers
|
||||
)
|
||||
.validate(statusCode: 200 ..< 300)
|
||||
.responseString { response in
|
||||
printLog(response)
|
||||
}
|
||||
// .responseString { response in
|
||||
// printLog(response)
|
||||
// }
|
||||
.responseDecodable(of: decodingType) { response in
|
||||
|
||||
switch response.result {
|
||||
case .success(let value):
|
||||
printLog("Good: \(value)")
|
||||
promise(.success(value))
|
||||
|
||||
case .failure(let error):
|
||||
printLog("Bad: \(error))")
|
||||
promise(.failure(error))
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
public func reloadAccessToken() -> Future<Any, Error> {
|
||||
|
||||
@UserDefault(key: "refresh", defaultValue: "refreshToken") var refresh
|
||||
return Future { promise in
|
||||
_ = loadAPIData(url: "\(API_URL)",
|
||||
return Future { [weak self] promise in
|
||||
guard let self = self else {return}
|
||||
APIManager.shared.loadAPIData(url: "\(API_URL)",
|
||||
path: "/api/v1/in/app/retryAccess",
|
||||
parameters: ["refresh": refresh],
|
||||
decodingType: APIResponse<Access>.self)
|
||||
|
@ -75,10 +91,11 @@ public func reloadAccessToken() -> Future<Any, Error> {
|
|||
promise(.failure(ACA_ERROR("Unknown ERROR")))
|
||||
}
|
||||
}
|
||||
|
||||
.store(in: &self.cancellables)
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user