인증 세션을 부여하고 URL을 로드한다【Swift3.0】【Alamofire4.2.0】
전제
Alamofire 4.2.0 사용
1. 인증 세션 취득
로그인 화면 등으로 전화
// Swift 3.0
// Alamofire 4.2.0
/**
認証セッション(Cookie)を取得・保存する
- parameter authUrlString: 認証(ログイン)URL
- parameter authParams: 認証情報ディクショナリ
- returns: void
*/
func getAuthSession(_ authUrlString:String,authParams:Dictionary<String,String>) {
let storage = HTTPCookieStorage.shared
// Cookieリセット
for cookie in storage.cookies! {
storage.deleteCookie(cookie)
}
var parameters:Dictionary<String,String> = [:]
for (key, value) in authParams {
parameters.updateValue(value, forKey: key)
}
Alamofire.request(authUrlString, method:.post, parameters:parameters ).response { response in
let res = response.response
let cookies = HTTPCookie.cookies(withResponseHeaderFields: res?.allHeaderFields as! [String : String], for: (res?.url!)!)
// Cookie保存
for i in 0 ..< cookies.count {
let cookie = cookies[i]
HTTPCookieStorage.shared.setCookie(cookie)
}
}
2. 인증 세션이있는 URL로드
미리 상기(getAuthSession)에서 취득한 세션을 부여해 URL을 로드
/**
認証セッション付きでURLをロードする
- parameter urlString: URL文字列
- parameter authUrlString: URL文字列
- returns: void
*/
func loadRequestWithAuthSession(_ urlString:String,authUrlString:String,webView:UIWebView) {
// セッション付きでロードしたいURL
let url = URL(string: urlString)
// 認証(ログイン)URL
let authUrl = URL(string: authUrlString)
var request = URLRequest(url: url! as URL)
let cookies = HTTPCookieStorage.shared.cookies(for: authUrl! as URL)
let header = HTTPCookie.requestHeaderFields(with: cookies!)
request.allHTTPHeaderFields = header
// ロード
webView.loadRequest(request as URLRequest)
}
냄새에 참고로 한 기사
【Swift】유저 인증 API를 통한 후, 동일한 세션으로서 UIWebView를 표시한다
...이 기사는 거의 여기의 Swift/Alamofire 버전 업 대응 버전과 같습니다
Reference
이 문제에 관하여(인증 세션을 부여하고 URL을 로드한다【Swift3.0】【Alamofire4.2.0】), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/fromage-blanc/items/ba583640e6dd6c16ad83텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)