【Google Oauth】Attributeerror: 'Installedappflow' Object Has No Attribute 'Run_Console'

【Google Oauth】Attributeerror: 'Installedappflow' Object Has No Attribute 'Run_Console'

I wrote a Python script(Google_add.py) which creates users in the Google Workspace. However, When it is run, an AttributeError occurred. How do I resolve this Error?

・Google_add.py (Excerpt)

PATH = '/opt/Google/credentials.json'
CLIENT_SECRETS = '/opt/Google/client_secrets.json'
credentials = None

#If there are credentials
if os.path.exists(PATH):
    credentials = Credentials.from_authorized_user_file(
      path = PATH,
      scopes = SCOPES)

#If there are no (valid) credentials available
if not credentials or not credentials.valid:
    if credentials and credentials.expired and credentials.refresh_token:
      credentials.refresh(Request())
    else:
      FLOW = flow.InstalledAppFlow.from_client_secrets_file(
        client_secrets_file = CLIENT_SECRETS,
        scopes = SCOPES)
      credentials = FLOW.run_console()
    with open(PATH, 'w') as token:
      token.write(credentials.to_json())

・Error Message

File "Google_add.py", line 186, in <module>
main()
File "Google_add.py", line 172, in main
FLOW.run_console()
AttributeError: 'InstalledAppFlow' object has no attribute 'run_console'

I refer the below site when I wrote it.

In the script, I want to authorize using the user account(not service account). And "run_local_server()" method doesn't work because my linux server isn't a web server (doesn't have httpd, nginx and so on).

(I'm sorry if my writing is hard to read.)

3

4 Answers

Expanding on George's answer above, the versions of the library from the github post that work are:

google-api-python-client==1.7.2
google-auth==1.8.0
google-auth-httplib2==0.0.3
google-auth-oauthlib==0.4.1

The issue may have been a version compatibility issue of google-api-python-client library with other libraries like

  • google-auth
  • google-auth-httplib2
  • google-auth-oauthlib

You just need to make sure that the version of your google-api-python-client supports the versions you have installed to its dependency libraries. You can view the full change log of google-api-python-client library here

References:

google-api-python-client change log

google-api-python-client

google_auth_oauthlib.flow module

Github post similar issue

1

You said:

"run_local_server()" method doesn't work because my linux server isn't a web server (doesn't have httpd, nginx and so on).

This isn't true. The solution below will work also on non-web servers, your local machine, local scripts etc... However, you need a way to open a browser. If not, you can create the token on your local machine and copy the token to your server.

Replace: credentials = FLOW.run_console()

with: credentials = FLOW.run_local_server(port=0)

This will work perfectly in all situations.

For more info, refer to

The run_console() (OOB) flow has been deprecated by Google, that's why it was removed from newer versions of the Google OAuth connector

Replace the line

credentials = FLOW.run_console()

to

credentials = FLOW.run_local_server()


people also got it working by these configurations:

google-api-python-client==1.7.2
google-auth==2.14.1
google-auth-httplib2==0.0.3
google-auth-oauthlib==0.4.1

git link :

Alexander Ross
Author

Alexander Ross

Alexander Ross has covered the video game industry for a decade, writing deep dives on game design, esports tournaments, VR developments, and gaming culture.