[swift] Swift ObjectMapper를 사용한 인증과 권한 처리 방법은?

많은 앱이 사용자 인증 및 권한 관리를 해야합니다. Swift에서는 ObjectMapper 라이브러리를 사용하여 JSON 데이터를 객체 모델로 변환할 수 있습니다. 따라서 Swift ObjectMapper를 사용하여 인증과 권한 처리를 구현할 수 있습니다.

먼저, ObjectMapper를 프로젝트에 추가해야합니다. CocoaPods를 사용하면 다음과 같이 Podfile에서 ObjectMapper를 추가할 수 있습니다.

pod 'ObjectMapper', '~> 4.2'

그리고 pod install 명령을 실행하여 ObjectMapper를 설치합니다.

이제 인증 및 권한 처리를 위한 모델 클래스를 작성해 보겠습니다. 예를 들어, 사용자 인증 정보를 저장하는 User 모델 클래스를 만들어 봅시다.

import Foundation
import ObjectMapper

class User: Mappable {
    var id: Int?
    var username: String?
    var token: String?
    var permissions: [String]?
    
    required init?(map: Map) { }
    
    func mapping(map: Map) {
        id <- map["id"]
        username <- map["username"]
        token <- map["token"]
        permissions <- map["permissions"]
    }
}

위의 코드에서는 Mappable 프로토콜을 채택하여 ObjectMapper에서 필요한 매핑을 수행할 수 있도록 합니다. mapping 함수를 구현하여 각 속성의 매핑을 정의합니다.

다음으로, 인증 요청을 보내고 응답에서 받은 JSON 데이터를 User 객체로 변환하는 코드를 작성해야합니다.

import Alamofire
import ObjectMapper

func authenticate(username: String, password: String, completion: @escaping (User?) -> Void) {
    let parameters: [String: Any] = [
        "username": username,
        "password": password
    ]
    
    Alamofire.request("https://example.com/authenticate", method: .post, parameters: parameters)
        .responseJSON { (response) in
            guard response.result.isSuccess, let json = response.result.value as? [String: Any] else {
                completion(nil)
                return
            }
            
            if let user = Mapper<User>().map(JSON: json) {
                completion(user)
            } else {
                completion(nil)
            }
        }
}

위 코드에서는 Alamofire를 사용하여 서버에 인증 요청을 보냅니다. 응답이 성공적이고 받은 JSON 데이터를 User 객체로 변환할 수 있다면 completion 클로저를 호출하여 User 객체를 반환합니다.

이제 위의 authenticate 함수를 사용하여 사용자 인증을 처리할 수 있습니다.

authenticate(username: "test", password: "password") { (user) in
    if let user = user {
        // 인증 성공
        print("인증 성공 - 사용자 이름: \(user.username), 토큰: \(user.token)")
        
        // 권한 확인
        if let permissions = user.permissions {
            if permissions.contains("admin") {
                // 관리자 권한이 있는 경우
                print("관리자입니다.")
            } else {
                // 일반 사용자인 경우
                print("일반 사용자입니다.")
            }
        }
    } else {
        // 인증 실패
        print("인증 실패")
    }
}

위의 코드에서는 authenticate 함수를 호출하여 인증을 시도하고, 성공 여부에 따라 적절한 메시지를 출력합니다. 인증이 성공하고 사용자에게 관리자 권한이 있는지를 확인하여 관리자인 경우에는 “관리자입니다.” 메시지를, 일반 사용자인 경우에는 “일반 사용자입니다.”를 출력합니다. 인증에 실패한 경우에는 “인증 실패”를 출력합니다.

Swift ObjectMapper를 사용하여 인증과 권한 처리를 간편하게 구현할 수 있습니다. ObjectMapper는 JSON 데이터와 객체 모델 간의 변환 작업을 쉽게 처리해줍니다. 이를 활용하여 유연하고 효율적인 코드를 작성할 수 있습니다.

참고 자료: