인증 세션을 부여하고 URL을 로드한다【Swift3.0】【Alamofire4.2.0】

앱 안에 여러 걸친 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 버전 업 대응 버전과 같습니다

    좋은 웹페이지 즐겨찾기