Skip to content

some requested scopes were invalid #61

Open

Description

@martinlockett

The README says:

manager.authorize('google', {scopes: 'profile,email'}

but this gives the error 'some requested scopes were invalid'

using the following works so I will raise a PR on the README

manager.authorize('google', {scopes: 'profile email'}

Activity

  1. BricePissard commented on Feb 9, 2017

    @BricePissard

    Maybe setting the credential's scopes into fully qualified URL separated by '+' will work for you:

    google: {
      ...,
      scopes: {
         'https://www.googleapis.com/auth/plus.login+' +
         'https://www.googleapis.com/auth/calendar+' +
         'https://www.googleapis.com/auth/calendar.readonly+' +
         'https://www.googleapis.com/auth/contacts+' +
         'https://www.googleapis.com/auth/contacts.readonly+' +
         'https://www.googleapis.com/auth/userinfo.profile+' +
         'https://www.googleapis.com/auth/userinfo.email+' +
         'https://www.googleapis.com/auth/user.addresses.read+' +
         'https://www.googleapis.com/auth/user.birthday.read+' +
         'https://www.googleapis.com/auth/user.emails.read+' +
         'https://www.googleapis.com/auth/user.phonenumbers.read'
      }
    }

    In my case I have another error appearing after validating the scopes hand check.

    with:

    OAuth.authorize( 'google', { scopes: 'profile+email' } )
    .then( ( oauthCredit:Object ):void => {
      console.log( oauthCredit ); // <-- status 'ok', the token is received.
      const token:string = oauthCredit.response.credentials.accessToken;
      const url:string = 'https://www.googleapis.com/oauth2/v1/userinfo';
      //const url:string = 'https://www.googleapis.com/plus/v1/people/me'; // <-- either with this WS and without parameters
      OAuth.makeRequest( 'google', url, {
           method : 'get',
           params : {
             alt : 'json',
             access_token : token
           }
         }
       )
       .then( ( rep:Object ):void => {
         console.log( rep ); // <-- crash before arriving here
      });
    });

    Everything works fine on iOS simulator but on the device I've got in XCode logs:
    { status: 'error', msg: 'The operation couldn’t be completed. (NSURLErrorDomain error -1012.)' }

    Is anyone facing the same issue?

    Ok I fixed that issue, the : NSURLErrorDomain error -1012 mean error 401, when the scopes get updates (one scope more or one scope less) the token is invalidated, it needs to be reseted and assigned again.

  2. youbiak commented on Feb 10, 2017

    @youbiak
    Contributor

    Couldn't make this work on android, invalid_scope error

    manager.authorize('google', {scopes: 'email,profile'})
      .then(resp => console.log(resp))
      .catch(err => console.log(err));
  3. martinlockett commented on Feb 10, 2017

    @martinlockett
    Author
  4. buskerone commented on Mar 2, 2017

    @buskerone

    For me it works with {scopes: 'email+profile'}.

  5. filiphosko commented on Mar 7, 2017

    @filiphosko

    {scopes: 'email profile'} didn't work, {scopes: 'email+profile'} worked. Thanks @buskerone

  6. gvillenave commented on Jun 13, 2017

    @gvillenave

    Submitted #121 for this issue

  7. SirNeuman commented on Jun 16, 2017

    @SirNeuman

    neither {scopes: 'email+profile'} nor {scopes: 'email,profile'} nor {scopes: 'email profile'} worked for me. Though doing just {scopes: 'email'} or {scopes: 'profile'} did work for me.

  8. darkmantle commented on Aug 2, 2017

    @darkmantle

    I am getting this error too, no matter what I use as a delimiter. Single scopes work fine but that is no help to me.

  9. maxlang commented on Mar 2, 2018

    @maxlang

    Not sure if someone has a better solution or a newer fork, but here's what seemed to work for me:

    TL;DR For android use the rawScopes: "true" in your config and use space as the delimiter, for iOS use + as the delimiter. Note that for the android config, "true" is a string not a boolean.

    let config
    let scopes
    
    if (Platform.OS === 'ios') {
      config = {
        google: {
          client_id: '...',
          callback_url: '...',
        },
      }
      scopes = 'openid+email+profile'
    } else if (Platform.OS === 'android') { 
      config = {
        google: {
          client_id: '...',
          client_secret: '...',
          callback_url: 'http://localhost/google',
          rawScopes: 'true',
        },
      }
      scopes = 'openid email profile'
    }
    
    manager.configure(config)
    
    // ...
    
    manager.authorize('google', { scopes })
  10. haotangio commented on May 12, 2018

    @haotangio

    @maxlang The error on Android while using "react-native-oauth": "^2.2.0". Do you encounter it?

    screen shot 2018-05-12 at 12 24 20 pm

  11. maxlang commented on May 14, 2018

    @maxlang

    @haotangio I did originally, but worked around it using the code above. Did you try using rawScopes: 'true'?

    As for version, I'm actually using https://github.com/exentrich/react-native-oauth to work around some other issues I was having, but the android code should be the same I think.

  12. haotangio commented on May 17, 2018

    @haotangio

    @maxlang I did try rawScopes: 'true' before posting the previous comment.
    However, the issue was still there.

  13. maxlang commented on May 22, 2018

    @maxlang

    Ok, it looks like the change to support rawScopes was never officially "released" as a version.

    Try the following:

    npm uninstall --save react-native-ouath
    npm install --save fullstackreact/react-native-oauth

    This should update you to master.

    Make sure rawScopes appears in .../node_modules/react-native-oauth/android/src/main/java/io/fullstack/oauth/OAuthManagerProviders.java as it does here: https://github.com/fullstackreact/react-native-oauth/blob/master/android/src/main/java/io/fullstack/oauth/OAuthManagerProviders.java#L271

  14. haotangio commented on May 23, 2018

    @haotangio

    @maxlang Thank you so much for your information. I will try soon. I guess it will work.

  15. CaelumF commented on Dec 15, 2021

    @CaelumF

    Leaving it here for the Google Search ™️ users:

    https://developers.google.com/identity/protocols/oauth2/scopes

    Make sure you have the right scopes enabled in the project. For e.g., to get https://www.googleapis.com/auth/userinfo.email you need to enable https://console.cloud.google.com/apis/library/script.googleapis.com

  16. hashmatjibran commented on Jul 15, 2023

    @hashmatjibran

    you can also use the scopes in this way.
    create a route like this and pass in the parameters in the passport.authenticate middleware
    router.get('/users/auth/google',passport.authenticate('google',{scope:['profile','email']}));

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions