Search code examples
alamofire

how to set a default http header with alamofire


I want to set a header so that all requests include an authorized token header once the user logs in. I thought I could set the header in the shared alamofire manager by calling my setToken function but I don't think I'm doing it correctly. What's my mistake? Is there a better way of setting a default header for all alamofire requests?

 class UserService : NSObject {

    static let manager: Alamofire.Manager = Alamofire.Manager(configuration:  NSURLSessionConfiguration.defaultSessionConfiguration())

    class func setToken(token:String){
        manager.session.configuration.HTTPAdditionalHeaders = [
            "x-token": token
        ]

    }

   class func addFriend(user:LoggedUser, uname:String, callback:((success: Bool, errorMsg: String?)->Void)) {

        let params:[String : AnyObject] = ["uname": uname]

        let url = AppConfig.sharedInstance().baseURL() + "/user/\(user.userId!)/friends"
        Alamofire.request(.POST, url , parameters:params, encoding:.JSON)
            .responseJSON(options: .MutableContainers, completionHandler:{ (request, response, JSON, error) -> Void in

        //token is not set in the request
    }

}

Solution

  • Your code never make use of your custom manager, use following code:

    class CustomManager: Manager {
        static public let manager = CustomManager.generateManager()
        class func generateManager()-> CustomManager {
            var defaultHeaders = Alamofire.Manager.defaultHTTPHeaders ?? [:]
            defaultHeaders["x-token""] = "token"
            let configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
            configuration.HTTPAdditionalHeaders = defaultHeaders
            let manager = CustomManager(configuration: configuration)
            return manager
        }
    }
    
    class UserService : NSObject {
    
       class func addFriend(user:LoggedUser, uname:String, callback:((success: Bool, errorMsg: String?)->Void)) {
    
            let params:[String : AnyObject] = ["uname": uname]
    
            let url = AppConfig.sharedInstance().baseURL() + "/user/\(user.userId!)/friends"
            CustomManager.manager(.POST, url , parameters:params, encoding:.JSON)
                .responseJSON(options: .MutableContainers, completionHandler:{ (request, response, JSON, error) -> Void in
    
            // ...
        }
    }