oauth2client.client - 没有refresh_token的收到令牌响应。考虑使用prompt ='同意'进行重新验证。

时间:2017-07-09 15:22:37

标签: google-api google-oauth google-oauth2 google-api-python-client

我从移动应用程序收到了Google身份验证代码,并使用python oauth2client进行交换以访问令牌和刷新令牌,如下所示:

credentials = client.credentials_from_clientsecrets_and_code(
                        app.config.get('GG_APP_SECRET'),
                        ['profile'],
                        authCodeFromMobileApp,
                        redirect_uri='http://example.com')

然后我收到了:

  

收到没有refresh_token的令牌响应。考虑   通过提示='同意'进行重新验证。

基于{{3}}它说我必须设置:access_type=offline但是我不确定oauth2client在哪里/如何设置它?

以前有人曾经解决过这个问题吗?

增加:

我也在下面尝试过:

flow = client.flow_from_clientsecrets(app.config.get('GG_APP_SECRET'),
                                      ['profile'],
                                      message=None,
                                      cache=None,
                                      redirect_uri='http://example.com',
                                      device_uri=None)
flow.params['access_type'] = 'offline'
credentials = flow.step2_exchange(req_gg_code, http=None)

但仍然有同样的意外结果......

1 个答案:

答案 0 :(得分:1)

flow_from_clientsecrets方法有一个名为提示的参数,你可以传递一个值"同意"

flow = client.flow_from_clientsecrets(
            app.config.get('GG_APP_SECRET'),
            ['profile'],
            message=None,
            cache=None,
            redirect_uri='http://example.com',
            device_uri=None,
            prompt='consent'
)

现在,每次都会要求用户同意,每次使用都会得到 refresh_token