p2 / OAuth2

OAuth2 framework for macOS and iOS, written in Swift.
Other
1.14k stars 276 forks source link

useAuthenticationSession = true not launching an ASWebAuthenticationSession #360

Open dnsco opened 3 years ago

dnsco commented 3 years ago

I've got the following code, but it's launching a safari window instead of an ASWebAuthenticationSession.

I'm not sure if this is because I'm using SwiftUI?

This could be user error, but it wasn't clear from the docs.

let oauth2 = OAuth2CodeGrant(settings: [
  //...
] as OAuth2JSON)

oauth2.logger = OAuth2DebugLogger(.trace)
oauth2.authConfig.ui.useAuthenticationSession = true

oauth2.authorize() {(json, err) in
 //...
}

If I set:

oauth2.authConfig.authorizeEmbedded = true

I get:

2021-02-06 04:02:47.060157-0700 better[2680:60843] Fatal error: Invalid authConfig.authorizeContext, must be a UIViewController but is nil: file iOS/OAuth2Authorizer+iOS.swift, line 328
longinius commented 3 years ago

If authorizeEmbedded is not set, it will open Safari and doesn't recognize the useAuthenticationSession Setting. So to use you must set

oauth2.authConfig.authorizeEmbedded = true

The Fatal Error is there because of the missing context. But the current version (5.3.1) doesn't work with SwiftUI, because the type of the presentation context was changed. So for a quick fix use version 5.3.0. With this version the ASWebAuthenticationSession opens as expected.

Create an ASPresentationAnchor:

let presentationAnchor = ASPresentationAnchor()

Then set it as context for for the OAuth library:

let oauth2 = OAuth2CodeGrant(settings: [
  //...
] as OAuth2JSON)

oauth2.logger = OAuth2DebugLogger(.trace)
oauth2.authConfig.authorizeContext = presentationAnchor
oauth2.authConfig.authorizeEmbedded = true
oauth2.authConfig.ui.useAuthenticationSession = true

oauth2.authorize() {(json, err) in
 //...
}
svencorell commented 3 years ago

For me, it's working with 5.3.1. I'm using:


oauth2.logger = OAuth2DebugLogger(.trace)
oauth2.authConfig.ui.useAuthenticationSession = true
oauth2.authConfig.authorizeEmbedded = true
oauth2.authConfig.authorizeContext = UIApplication.shared.windows.first!.rootViewController!`