2016-10-26 13 views
3

私はAlamofire 4.0を使用している私のアプリケーションで認証を実装しています 私が作る各HTTP要求でヘッダーに追加するトークンを持っていますレスポンスコードが401の場合はすべてのリクエストをチェックインします。その場合、ユーザをログアウトする必要があります。Alamofire 4でのヘッダー認証のベストプラクティス、グローバル401コードの捕捉

ベストプラクティスは何ですか?各リクエストにこの動作を追加する簡単な方法はありますか?

私はセッションマネージャーとリクエストアダプターhereを見てきました。シングルトンリクエストマネージャーを作成してリクエストを作成するのはかなり簡単でしたが、集中型の検証を追加するうまい方法が見つかりません401レスポンスコードの場合 これは一般的な検証でなければなりません。ユーザーがログアウトすると失敗し、合格すれば誰でも要求を処理できるようになります。

私の目標は、自分のコードで401エラーコードをチェックするポイントを1つだけにすることです。

私は満足のいく答えが見つからない これについてのアドバイスはありますか?

+0

こんにちは、同じ問題を解決しようとして、あなたはそれを行う方法を見つけましたか? – Smugrik

+0

以下の回答から推薦されるように、私はセッションマネージャをオーバーライドしました。次に、私は401コードの基本的な検証を行いました。妥当性検査が合格した場合は、依頼者の完了ハンドラを呼び出します – allemattio

+0

@allemattioソリューションのコードを投稿できますか?ありがとう – Giorgio

答えて

0

GETの方法はSessionManagerです。各リクエストで検証を行うWebサービス用の別のクラスを作成します。

let alamofireManager: SessionManager = { 
    let configuration = URLSessionConfiguration.default 
    configuration.httpMaximumConnectionsPerHost = AppConstants.maxSimultaneousDownloads 
    configuration.requestCachePolicy = .reloadIgnoringLocalCacheData 
    return SessionManager(configuration: configuration) 
    }() 


self.alamofireManager.request(UrlString) 
     .responseJSON { response in 

      print("response: \(response)") 

      guard response.result.isSuccess else { 
      //Request fails here. Trigger here to log out the user 
      return 
      } 

      if let JSON = response.result.value { 
      print("Successful") 
      //or check response code here 

      } 
     } 
+0

私はこれは私の質問に答えないと思う。私が本当に望むのは、401エラー処理を集中化することです。他のすべてのケースでは、成功または他の失敗のケース(422,500など)を処理するよう要求した人に要求したいと思います。あなたは私が作るすべてのリクエストで401を処理するように提案しています。私はこれを避けたいと思います。問題をよりよく説明するために私の質問を編集しました – allemattio

関連する問題