PyDrive 2.0 – AuthenticationError: No code found in redirect

PyDrive 2.0 – AuthenticationError: No code found in redirect

设置

我正在使用 PyDrive 2.0 连接到 Google 驱动器 API。

def connect_google_drive_api():
    
    import os   
        
    # use Gdrive API to access Google Drive
    os.chdir('/Users/my/fol/ders/access_google_drive')
    from pydrive.auth import GoogleAuth
    from pydrive.drive import GoogleDrive
    
    gauth = GoogleAuth()
    gauth.LocalWebserverAuth() # client_secrets.json need to be in the same directory as the script
    drive = GoogleDrive(gauth)
    
    return drive

工作目录 /Users/mypath/access_google_drive 包含 client_secrets.json,看起来像

{"web":{"client_id":"xxx","project_id":"invoice-creation-290413","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://oauth2.googleapis.com/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"xxx","redirect_uris":["http://localhost:8080/"],"javascript_origins":["http://localhost:8080"]}}

我用 xxx.

替换了真正的 client_idclient_secret

问题

当浏览器(Safari 14.0)显示Gdrive api link wants to access your Google Account时,我点击Allow,过程似乎卡住了。

20 秒左右后,显示以下错误,

Failed to find "code" in the query parameters of the redirect.
Try command-line authentication
Traceback (most recent call last):

  File "<ipython-input-36-792f41ab7318>", line 1, in <module>
    gauth.LocalWebserverAuth()

  File "/opt/anaconda3/lib/python3.7/site-packages/pydrive2/auth.py", line 125, in _decorated
    code = decoratee(self, *args, **kwargs)

  File "/opt/anaconda3/lib/python3.7/site-packages/pydrive2/auth.py", line 273, in LocalWebserverAuth
    raise AuthenticationError("No code found in redirect")

AuthenticationError: No code found in redirect

我该如何解决这个问题?

我正在将 connect_google_drive_api() 导入另一个脚本,比如脚本 x.py

connect_google_drive_api() 函数和 x.py 都有行 os.chdir('/Users/my/fol/ders/access_google_drive') 将工作目录设置为 client_secrets.json 所在的位置。

使用以下代码,我实际上建立了连接,没有任何问题,

def connect_google_drive_api():
        
    # use Gdrive API to access Google Drive
    from pydrive2.auth import GoogleAuth
    from pydrive2.drive import GoogleDrive
    
    gauth = GoogleAuth()
    gauth.LocalWebserverAuth() # client_secrets.json need to be in the same directory as the script    
    
    drive = GoogleDrive(gauth)
    
    return drive

正试图从 Jupiter 笔记本中 运行 此代码。当我将浏览器从 Safari(14.0.1) 切换到 Chrome(87.0.4280.88)

时,我能够成功进行身份验证