我正在使用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>
答案 0 :(得分:0)
消息,&#34;在cfc&#34;中找不到的方法是因为您从cfc外部调用私有函数SetAccess_token
。 Access="private"
表示无法从cfc外部调用函数,因为它的作用域是组件专用的。将函数访问权限更改为access="public"
,您可以按原样调用它:componentPath.publicFunction()