개발
RxSwift로 자동 로그인 기능 로직 만들기
한번사는인생~키야
2024. 7. 9. 12:54
728x90
RxSwift를 사용한 간단한 자동 로그인 기능 구현
RxSwift를 사용하여 간단한 자동 로그인 기능을 구현하는 방법은 다음과 같습니다.
1. 저장소 사용
- 사용자 로그인 정보 (예: ID, 비밀번호)를 안전하게 저장하기 위해 UserDefaults 또는 Keychain과 같은 저장소를 사용합니다.
2. ViewModel 설정
- ViewModel클래스를 만들고 자동 로그인 로직을 담당할 속성과 메서드를 정의합니다.
- 저장된 로그인 정보를 불러오고, 자동 로그인 여부를 판단하는 로직을 구현합니다.
import RxSwift
import KeychainSwift
class LoginViewModel {
let isAutoLoginEnabled = BehaviorSubject<Bool>(value: false)
let loginResult = PublishSubject<LoginResult>()
private let keychain = KeychainSwift()
private let disposeBag = DisposeBag()
init() {
loadAutoLoginSettings()
}
private func loadAutoLoginSettings() {
if let savedEmail = keychain.get("email"),
let savedPassword = keychain.get("password") {
isAutoLoginEnabled.onNext(true)
login(email: savedEmail, password: savedPassword)
} else {
isAutoLoginEnabled.onNext(false)
}
}
func login(email: String, password: String) {
// 실제 로그인 API 호출 및 처리
// 예시:
DispatchQueue.main.asyncAfter(deadline: .now() + 2) { [weak self] in
if email == "user@example.com" && password == "password" {
self?.loginResult.onNext(.success)
// 저장된 로그인 정보가 없거나 유효하지 않은 경우 저장
if !self!.keychain.get("email")! || !self!.keychain.get("password")! {
self!.keychain.set(email, forKey: "email")
self!.keychain.set(password, forKey: "password")
}
} else {
self?.loginResult.onNext(.failure(NSError(domain: "LoginError", code: 101, userInfo: nil)))
}
}
}
}
enum LoginResult {
case success
case failure(Error)
}
3. 자동 로그인 시도
- ViewController에서 ViewModel의 isAutoLoginEnabled Observable을 구독하고, 자동 로그인이 활성화된 경우 login 메서드를 호출합니다.
class LoginViewController: UIViewController {
private let viewModel = LoginViewModel()
private let disposeBag = DisposeBag()
override func viewDidLoad() {
super.viewDidLoad()
setupBindings()
}
private func setupBindings() {
viewModel.isAutoLoginEnabled
.subscribe(onNext: { [weak self] in
if $0 {
self?.viewModel.login(email: "저장된 이메일", password: "저장된 비밀번호") // 실제 저장된 값으로 변경
}
})
.disposed(by: disposeBag)
viewModel.loginResult
.subscribe(onNext: { [weak self] result in
self?.handleLoginResult(result)
})
.disposed(by: disposeBag)
}
// ... (이전 코드와 동일)
}
4. 사용자 설정
- 사용자가 자동 로그인 기능을 활성화하거나 비활성화할 수 있는 설정 화면을 제공합니다.
- 설정 변경 시 isAutoLoginEnabled BehaviorSubject의 값을 업데이트하고, 저장된 로그인 정보를 관리합니다.
참고:
- 이 코드는 기본적인 예시이며 실제 구현에서는 보안을 고려하여 로그인 정보를 안전하게 저장하고, 사용자 동의를 얻은 후 자동 로그인을 수행해야 합니다.
- RxSwift의 다양한 연산자와 API를 활용하여 더욱 정교하고 효율적인 자동 로그인 기능을 구현할 수 있습니다.