Search code examples
iosswiftalamofireswifty-jsondjango-rest-auth

Return token string from alamofire


I'm traying to save a temporary token stored in to my django-rest framework to do some GET/POST requests. This is my code:

class API {

    let apiBaseUrl = "https://myhost.tld"

    func getToken(loginData: NSDictionary ,completionHandler: (NSDictionary?, NSError?) -> ()) {
        makePOST(loginData, section: "api-token-auth", completionHandler: completionHandler)
    }

    func getList(tokenStr: String, completionHandler: (NSDictionary?, NSError?) -> ()) {
        makeGET(tokenStr, section: "api/list", completionHandler: completionHandler)
    }

    func makePOST(login: NSDictionary, section: String, completionHandler: (NSDictionary?, NSError?) -> ()) {

        Alamofire.request(.POST, "\(apiBaseUrl)/\(section)/", parameters: login as! [String : String])
            .responseJSON { response in
                switch response.result {
                case .Success(let value):
                    completionHandler(value as? NSDictionary, nil)
                case .Failure(let error):
                    completionHandler(nil, error)
                }
        }
    }

    func makeGET(token: String?=nil, section: String, completionHandler: (NSDictionary?, NSError?) -> ()) {

        Alamofire.request(.POST, "\(apiBaseUrl)/\(section)/", headers: ["Authorization":"Token \(token)"])
            .responseJSON { response in
                switch response.result {
                case .Success(let value):
                    completionHandler(value as? NSDictionary, nil)
                case .Failure(let error):
                    completionHandler(nil, error)
                }
        }
    }
}

So when i create an object type API() and I can view returned my token when i call getToken but i dont know how to store this to pass it to api.getList(token) function:

let api = API()
api.getToken(["username":"blah","password":"blah"]) { responseObject, error in
        debugPrint("responseObject = \(responseObject!["token"])")
        return
}...

Thanks!


Solution

  • Try the following code:

    let api = API()
        api.getToken(["username":"blah","password":"blah"], { responseObject, error in
                print("responseObject = \(responseObject!["token"])")
                api.getList(responseObject!["token"], { responseObject, error in
          }
        )
        })