Google Calendar API V3刷新令牌混淆

时间:2015-07-14 08:56:46

标签: coldfusion google-calendar-api google-oauth

我正在使用billeatman的CFC for the Google Calendar V3 API。我已经成功地将它集成到我的页面中,我在那里登录并进行身份验证并开始工作。即使会话在我的网站中仍处于活动状态,我的问题也会在身份验证过期时启动。

我尝试将Google API返回的结构与数据库表中的Access_token和refresh_token一起存储。存储后,我只是感到困惑。我怎么称呼它?上面的GIT代码就是这样说的:

<cfset application.oauth2.refreshToken() />

该函数具有以下代码:

<cffunction name="RefreshToken" access="public" output="false" hint="I take the refresh_token from the authorization procedure and get you a new access token.">
    <cfset var strURL = base_auth_endpoint & "token">
    <cfhttp url="#strURL#" method="POST">
        <cfhttpparam name="client_id" type="formField" value="#variables.client_id#">
        <cfhttpparam name="client_secret" type="formField" value="#variables.client_secret#">
        <cfhttpparam name="refresh_token" type="formField" value="#getTokenStruct().refresh_token#">
        <cfhttpparam name="grant_type" type="formField" value="refresh_token">
    </cfhttp>
    <cfreturn manageResponse(cfhttp.FileContent)>
</cffunction>

但我对于如何将存储在数据库中的令牌传递给refreshToken感到很遗憾。所以我尝试的是,调用以下两个函数:

<cfset application.oauth2.SetRefresh_token('#getaccess.refreshtoken#')>
<cfset application.oauth2.SetAccess_token('#getaccess.accesstoken#')> 

此部分引发错误:

<cfset application.oauth2.SetAccess_token('#getaccess.accesstoken#')>

它说“在CFC中找不到方法”。我搞不清楚了。 如何保存oauth2 for google calendar,直到我退出

<cffunction name="SetAccess_token" access="private" output="false" hint="setter for oauth access_token">
   <cfargument name="access_token" type="string" required="true">
   <cfset getTokenStruct()['access_token'] = arguments.access_token>
</cffunction>

<cffunction name="SetRefresh_token" access="public" output="true" hint="setter for oauth refresh_token">
   <cfargument name="refresh_token" type="string" required="true">
   <cfset getTokenStruct()['refresh_token'] = arguments.refresh_token>
</cffunction>

1 个答案:

答案 0 :(得分:0)

消息,&#34;在cfc&#34;中找不到的方法是因为您从cfc外部调用私有函数SetAccess_tokenAccess="private"表示无法从cfc外部调用函数,因为它的作用域是组件专用的。将函数访问权限更改为access="public",您可以按原样调用它:componentPath.publicFunction()