generic-oauth2 icon indicating copy to clipboard operation
generic-oauth2 copied to clipboard

Auth code is returnedby provider but error from plugin: Authorization failed on IOS - ERR_NO_AUTHORIZATION_CODE

Open ap0894 opened this issue 1 year ago • 3 comments

Description

On platform iOS after user sucessfully completes login on OAUTH provider page user is redirected back to the app where the following is logged in XCode indicating that code parameter is correctly set in callback but plugin is erroring with ERR_NO_AUTHORIZATION_CODE

{"iosOpenInPlace":"","url":"com.refsix:\/\/oauth?code=kM1GbawNyK5xAU0m7SnpbIBy0RVWMatcR11_oxd3Ms4&state=LrRyMwj0TnbnjlobfIPI","iosSourceApplication":"com.apple.SafariViewService"}
I/Capacitor/GenericOAuth2Plugin: Authorization failed with The operation couldn’t be completed. (OAuthSwiftError error -11.)
ERROR MESSAGE:  {"message":"ERR_NO_AUTHORIZATION_CODE","errorMessage":"ERR_NO_AUTHORIZATION_CODE"}

Capacitor version:

Run npx cap doctor:

Latest Dependencies:

  @capacitor/cli: 6.1.2
  @capacitor/core: 6.1.2
  @capacitor/android: 6.1.2
  @capacitor/ios: 6.1.2

Installed Dependencies:

  @capacitor/cli: 6.1.2
  @capacitor/core: 6.1.2
  @capacitor/android: 6.1.2
  @capacitor/ios: 6.1.2

[info] Using Gemfile: RubyGems bundle installed
[success] iOS looking great! 👌
[success] Android looking great! 👌

Library version:

@capacitor-community/[email protected]

OAuth Provider:

Assignr. Documentation: https://assignr-api.readme.io/reference/authentication

Your Plugin Configuration

const startOAuthFlow = async () => {
        setLoading(true);
        try {
            console.log('Starting OAuth flow...');
            const result = await GenericOAuth2.authenticate({
                authorizationBaseUrl: 'https://api.assignr.com/oauth/authorize',
                accessTokenEndpoint: 'https://api.assignr.com/oauth/token',
                appId: CLIENT_ID,
                scope: 'games.read account.read',
                resourceUrl: '',
                logsEnabled: true,
                web: {
                    appId: CLIENT_ID,
                    responseType: "code",
                    accessTokenEndpoint: "https://api.assignr.com/oauth/token",
                    redirectUrl: REDIRECT_URI_WEB,
                    windowOptions: "height=600,left=0,top=0"
                },
                android: {
                    appId: CLIENT_ID,
                    responseType: "code",
                    pkceEnabled: true,
                    redirectUrl: REDIRECT_URI_ANDROID
                },
                ios: {
                    appId: CLIENT_ID,
                    responseType: "code",
                    pkceEnabled: true,
                    redirectUrl: REDIRECT_URI_IOS
                }
            });

            console.log('Authorization Code: ', result.authorizationCode);
            window.dispatchEvent(new CustomEvent('AuthorizationCodeReceived', { detail: result.authorizationCode }));
            setLoading(false);
        } catch (error: any) {
            console.error('OAuth2 Error:', JSON.stringify(error, null, 2));
            if (error.message === 'USER_CANCELLED') {
                console.log('User cancelled the authentication process.');
            } else {
                console.error('Error Details:', error);
            }
            setLoading(false);
        }
    };

Affected Platform(s):

  • iOS

    • Version/API Level: iOS 17.5 (21F79)
    • Device Model: iPhone 15 Pro
    • Content of your Info.plist
      <key>CFBundleURLTypes</key>
      <array>
      	<dict>
      		<key>CFBundleURLName</key>
      		<string>com.refsix</string>
      		<key>CFBundleURLSchemes</key>
      		<array>
      			<string>com.refsix</string>
      			<string>com.googleusercontent.apps.725565408878-gm2oam4oaje6h9noedv513e0ac6vigrb</string>
      		</array>
      	</dict>
      </array>
    

ap0894 avatar Oct 19 '24 17:10 ap0894