[👷] 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() LoginView()
case .Register(let type, let id): case .Register(let type, let id):
RegisterView(type: type, snsID: id) RegisterView(type: type, snsID: id)
case .SelectAcademy(let bids): case .SelectAcademy:
SelectAcademyView(bids: bids) SelectAcademyView()
case .Main: case .Main:
MainView() MainView()
case .ChatRoom(let id): case .ChatRoom(let id):

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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