083_Network(signup, login)
2022. 11. 2. 20:15ㆍSeSAC/수업정리
-. 회원가입 시 네트워크통신으로 회원정보를 서버에 저장(signup->server)
-. 로그인 시 네트워크통신에 성공하면(입력한 정보가 저장된 회원정보와 일치하면) 토큰발급(login->server)
-. 토큰을 Userdefaults 통해 사용자정보 헤더에 넣어서 화면전환할때마다 로그인 할 필요없도록 함.
코드축약 전
-. 네트워크 통신에 필요한 요소를 각각 선언(url, header, parameter)
func login() {
let url = "http://api.memolease.com/api/v1/users/login"
let header: HTTPHeaders = ["Content-Type": "application/x-www-form-urlencoded"]
let parameter = ["email": "testTJ@test.com",
"password": "12345678"]
AF.request(url, method: .post, parameters: parameter, headers: headers).validate(statusCode: 200...299).responseDecodable(of: Login.self) { response in
switch response.result {
case .success(let data):
print(data.token) //통신성공하면 디코딩한 내용으로 출력 가능
UserDefaults.standard.set(data.token, forKey: "token") //프로필정보 헤더에 넣어주기 위해 토큰값 저장
case .failure(_):
print(response.response?.statusCode)
}
}
}
코드축약 후
-. 열거형+익스텐션으로 참조파일을 만든 뒤 인스턴스 생성(let api)
-. 인스턴스 통해 익스텐션 연산프로퍼티에 접근(api.url, api.parameter 등)
-. parameter는 저장할 회원정보이기 때문에 고정값이면 안되므로 다양한 정보를 저장할 수 있도록 열거형 연관값 사용
enum SeSACAPI {
case login(email: String, password: String)
}
extension SeSACAPI {
var url: URL {
switch self {
case .login:
return URL(string: "http://api.memolease.com/api/v1/users/login")!
}
}
var headers: HTTPHeaders {
switch self {
case .signup, .login:
return ["Content-Type": "application/x-www-form-urlencoded"]
}
}
var parameter: [String: String] {
switch self {
case .login(email: let email, password: let password):
return ["email": email,
"password": password]
default: return ["": ""]
}
}
}
//로그인 성공하면 발급되는 토큰을 ud에 저장해서 사용자정보 헤더에 포함시킴
func login() {
let api = SeSACAPI.login(email: "testTJ@test.com", password: "12345678")
AF.request(api.url, method: .post, parameters: api.parameter, headers: api.headers).validate(statusCode: 200...299).responseDecodable(of: Login.self) { response in
switch response.result {
case .success(let data):
print(data.token) //통신성공하면 디코딩한 내용으로 출력 가능
UserDefaults.standard.set(data.token, forKey: "token") //프로필정보 헤더에 넣어주기 위해 토큰값 저장
case .failure(_):
print(response.response?.statusCode)
}
}
}
'SeSAC > 수업정리' 카테고리의 다른 글
082_Rx(Input, Output)+MVVM (0) | 2022.11.01 |
---|---|
43_Login, Lotto Examples(Observable+MVVM) (0) | 2022.10.25 |
074_MVVM+DiffableDataSource(숫자입력, 검색이미지) (0) | 2022.10.21 |
072_UICollectionLayoutListConfiguration(테이블뷰스타일 컬렉션뷰) (0) | 2022.10.18 |
032_for-in, foreach 알아보기 (0) | 2022.08.17 |