LoginSignup
15
15

More than 5 years have passed since last update.

認証セッションを付与してURLをロードする【Swift3.0】【Alamofire4.2.0】

Last updated at Posted at 2016-12-07

アプリ内に複数またがるWebViewのセッション管理方法のひとつとしてメモしておきます。

前提

  • 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バージョンアップ対応版のようなものです:relaxed:
15
15
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
15
15