Basecamp3 login issue with Oauth2 in Swift

121 Views Asked by At

My app needs to get a basecamp3 login. Hence I used the OAuth2Swift library. But unfortunately, I am unable to receive the token from basecamp even the user has authorized the app.

Below is the screenshot Basecamp3 Authorization screen

I have used the following code

    func createAuthRequest(){
    // create an instance and retain it
    let oauthswift = OAuth2Swift(
        consumerKey:    clientID,
        consumerSecret: clientSecret,
        authorizeUrl:   authURL,
        responseType:   "token"
    )

    //oauthswift.authorizeURLHandler = self
    oauthswift.authorizeURLHandler = SafariURLHandler(viewController: self, oauthSwift: oauthswift)

    let handle = oauthswift.authorize(
        withCallbackURL: URL(string: redirectURL)!,
        scope: "profile", state:"") { result in //This block of code never executed
            switch result {
            case .success(let (credential, response, parameters)):
                print(credential.oauthToken)
            // Do your request
            case .failure(let error):
                print(error.localizedDescription)
            }
    }
}

The code inside withCallbackURL never executed even the user has authorized the app.

Any help regarding this is appreciated.

1

There are 1 best solutions below

0
Dipendra On

I found the solution the problem was I was using wrong authentication & token URL.

Following URL need to be used. I missed to add web_server in auth/token url and unfortunately Basecamp haven't mentioned the same in their documets.

let authURL = "https://launchpad.37signals.com/authorization/new?type=web_server"

let tokenURL = "https://launchpad.37signals.com/authorization/token?type=web_server"

and redirectURL = com.abc.abc:/oauth2Callback (The same redircturl need to be updated for app under basecamp developer console where com.abc.abc is bundle id of the app)