Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions MeetKey/MeetKey.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = CJX79LBA76;
DEVELOPMENT_TEAM = "";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = MeetKey/Info.plist;
Expand Down Expand Up @@ -323,7 +323,7 @@
ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = AccentColor;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEVELOPMENT_TEAM = CJX79LBA76;
DEVELOPMENT_TEAM = "";
ENABLE_PREVIEWS = YES;
GENERATE_INFOPLIST_FILE = YES;
INFOPLIST_FILE = MeetKey/Info.plist;
Expand Down
16 changes: 11 additions & 5 deletions MeetKey/MeetKey/Network/API/BlockAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,17 @@ extension BlockAPI: TargetType {
var method: Moya.Method { .post }
var task: Task { .requestPlain }
var headers: [String: String]? {
var headers = ["Content-Type": "application/json"]

let accessToken = APIConfig.testToken

headers["Authorization"] = "Bearer \(accessToken)"
let token = KeychainManager.load(account: "accessToken") ?? ""

var headers: [String: String] = [
"Content-Type": "application/json"
]

// 토큰 있을 때만 Authorization 붙이기
if !token.isEmpty {
headers["Authorization"] = "Bearer \(token)"
}

return headers
}
}
14 changes: 10 additions & 4 deletions MeetKey/MeetKey/Network/API/LocationAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -49,11 +49,17 @@ extension LocationAPI: TargetType {
}

var headers: [String: String]? {
var headers = ["Content-Type": "application/json"]
let token = KeychainManager.load(account: "accessToken") ?? ""

var headers: [String: String] = [
"Content-Type": "application/json"
]

// 토큰 있을 때만 Authorization 붙이기
if !token.isEmpty {
headers["Authorization"] = "Bearer \(token)"
}

let accessToken = APIConfig.testToken

headers["Authorization"] = "Bearer \(accessToken)"
return headers
}
}
23 changes: 19 additions & 4 deletions MeetKey/MeetKey/Network/API/RecommendationAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -60,11 +60,26 @@ extension RecommendationAPI: TargetType {
}

var headers: [String: String]? {
var headers = ["Content-Type": "application/json"]
let token = KeychainManager.load(account: "accessToken") ?? ""

// 🔍 디버깅 로그 추가
print("------------------------------------------")
print("🚀 [NETWORK DEBUG] API 요청 발생")
print("📍 경로(Path): \(path)")
print("🔑 토큰 존재 여부: \(token.isEmpty ? "❌ 없음" : "✅ 있음")")
if !token.isEmpty {
print("🎫 토큰 앞부분: \(token.prefix(15))...") // 토큰 유효성 대조용
}
print("------------------------------------------")

var headers: [String: String] = [
"Content-Type": "application/json"
]

let accessToken = APIConfig.testToken

headers["Authorization"] = "Bearer \(accessToken)"
// 토큰 있을 때만 Authorization 붙이기
if !token.isEmpty {
headers["Authorization"] = "Bearer \(token)"
}


switch self {
Expand Down
25 changes: 20 additions & 5 deletions MeetKey/MeetKey/Network/API/ReportAPI.swift
Original file line number Diff line number Diff line change
Expand Up @@ -42,12 +42,27 @@ extension ReportAPI: TargetType {
}

var headers: [String: String]? {
var headers = ["Content-Type": "application/json"]

let accessToken = APIConfig.testToken

headers["Authorization"] = "Bearer \(accessToken)"
let token = KeychainManager.load(account: "accessToken") ?? ""

// 🔍 디버깅 로그 추가
print("------------------------------------------")
print("🚀 [NETWORK DEBUG] API 요청 발생")
print("📍 경로(Path): \(path)")
print("🔑 토큰 존재 여부: \(token.isEmpty ? "❌ 없음" : "✅ 있음")")
if !token.isEmpty {
print("🎫 토큰 앞부분: \(token.prefix(15))...") // 토큰 유효성 대조용
}
print("------------------------------------------")

var headers: [String: String] = [
"Content-Type": "application/json"
]

// 토큰 있을 때만 Authorization 붙이기
if !token.isEmpty {
headers["Authorization"] = "Bearer \(token)"
}

return headers
}
}
20 changes: 16 additions & 4 deletions MeetKey/MeetKey/Presentation/Login/KeychainManager.swift
Original file line number Diff line number Diff line change
Expand Up @@ -4,17 +4,25 @@ import Security
// Token 저장용 Keychain 헬퍼
enum KeychainManager {
static func save(value: String, account: String) throws {
if value.isEmpty {
print("❌ [KEYCHAIN DEBUG] 저장 실패: '\(account)'에 넣으려는 값이 빈 문자열입니다.")
return
}

let data = Data(value.utf8)
let query: [String: Any] = [
kSecClass as String: kSecClassGenericPassword,
kSecAttrService as String: "MeetKey",
kSecAttrAccount as String: account,
kSecValueData as String: data
kSecValueData as String: data,
]

SecItemDelete(query as CFDictionary)
let status = SecItemAdd(query as CFDictionary, nil)
if status != errSecSuccess {
if status == errSecSuccess {
print("✅ [KEYCHAIN DEBUG] '\(account)' 저장 성공")
} else {
print("❌ [KEYCHAIN DEBUG] '\(account)' 저장 실패 (Status: \(status))")
throw NSError(domain: "Keychain", code: Int(status), userInfo: nil)
}
}
Expand All @@ -25,7 +33,7 @@ enum KeychainManager {
kSecAttrService as String: "MeetKey",
kSecAttrAccount as String: account,
kSecReturnData as String: true,
kSecMatchLimit as String: kSecMatchLimitOne
kSecMatchLimit as String: kSecMatchLimitOne,
]

var item: CFTypeRef?
Expand All @@ -44,6 +52,10 @@ enum KeychainManager {
}

static func load(account: String) -> String? {
return try? read(account: account)
let result = try? read(account: account)
if result == nil {
print("⚠️ [KEYCHAIN DEBUG] '\(account)' 로드 실패 혹은 데이터 없음")
}
return result
}
}
8 changes: 8 additions & 0 deletions MeetKey/MeetKey/Presentation/Login/LoginViewModel.swift
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,20 @@ class LoginViewModel: ObservableObject {
let response = try await authService.login(provider: provider, idToken: idToken)
self.loginResponse = response
self.isLoginSuccess = true
print("DEBUG: 서버 응답 데이터 - AccessToken: \(response.accessToken ?? "nil"), IsNewMember: \(response.isNewMember)")

UserDefaults.standard.set(response.isNewMember, forKey: isNewMemberKey)
UserDefaults.standard.set(provider.rawValue, forKey: authProviderKey)
UserDefaults.standard.set(idToken, forKey: lastIdTokenKey)

if response.isNewMember {
if let accessToken = response.accessToken {
try? KeychainManager.save(value: accessToken, account: "accessToken")
print("DEBUG: 신규 유저 임시 토큰 저장 완료")
} else { print ("신규 유저에게 토큰이 전달되지 않았습니다")}
if response.memberId == nil {
print ("서버로부터 MemberID를 받지 못했습니다.")
}
self.shouldNavigateToSignup = true
} else {
guard let accessToken = response.accessToken,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -280,7 +280,7 @@ class OnboardingViewModel: ObservableObject {
let firstLanguage = mapLanguage(data.nativeLanguage)
let targetLanguage = mapLanguage(data.targetLanguage)
let targetLevel = mapLanguageLevel()
let phoneNumber = "010-0000-0000"
let phoneNumber = "+821000000000"

return SignupRequest(
idToken: idToken,
Expand Down