ColdFusion Dropbox - 如何从响应URI中获取令牌

时间:2017-03-13 10:17:10

标签: coldfusion dropbox dropbox-api

我正在尝试使用Dropbox从ColdFusion应用程序实现OAuth,我设法调用Dropbox方法来生成访问令牌,但是......我不知道如何从中生成TOKEN响应URI。我从Dropbox得到这样的东西:

http://localhost/dropbox/generate_token.cfm#access_token=AAAAAAAAYVM_XdCYlbTz0gQOwQkWlg6TDXf84_5h4giikg6J-7Man&token_type=bearer&uid=267693&account_id=dbid%3AAABeDMm-BN0n1DofLZz9kPZAipnQ

在这种情况下如何检索URL变量?我的意思是如果我做了

<cfdump var="#URL#">

我得到一个空结构。如果我做了

<cfdump var="#CGI#">

我仍然没有在结构中看到任何URL检索的参数。如何从Dropbox响应中获取变量及其值?

2 个答案:

答案 0 :(得分:1)

已更新

在某些时候,我认为我找到了一种阅读网址的方法,但现在 - 无缘无故 - 这已经不再适用了!我没有做任何改变,但下面的解决方案不再适用。

我可以使用document.location使用JavaScript阅读完整的网址,但这意味着要对ColdFusion页面进行额外提交,而我不想这样做。我想从URL获取Dropbox令牌并直接在此页面中将其保存到数据库...

请问任何新想法?

解决方案似乎在某些方面工作......

我找到了一种使用此方法获取URI字符串的方法:

<cfset objRequest = GetPageContext().GetRequest().getParameterMap() />

<cfdump var="#objRequest#">

<cfoutput>
<cfloop collection="#objRequest#" item="i">
    <p>
        #i# - #objRequest[i][1]#
    </p>
</cfloop>
</cfoutput>

从现在开始,我知道如何获取Dropbox返回的值。

答案 1 :(得分:0)

我找到了一种通过JavaScript读取浏览器URL来获取返回参数的方法,因此分两步:第一次,解析并提取完整的URL,包括#符号之后的部分(我找到了)这有一个名称,它被称为“URL片段”)和第二,创建一个带有已解析参数的JavaScript表单并重新提交给服务器。这是代码:

<cfparam name="FORM.action" default="">

<cfif FORM.action IS "save_token">

    <cfdump var="#FORM#">

<cfelse>

    <form name="main" id="main" method="post">
    <input type="hidden" name="action" id="action" value="save_token">
    </form>

    <script type="text/javascript" language="javascript">
    <!--
        var parameters = window.location.hash.substr(1).split("&");

        function addHidden(theForm, key, value) {
            // Create a hidden input element, and append it to the form:
            var input = document.createElement("input");
            input.type = "hidden";
            input.name = key;
            input.value = value;
            theForm.appendChild(input);
        }

        // Form reference:
        var theForm = document.forms["main"];

        for (var i=0; i<parameters.length; i++) {
            // Add data:
            addHidden(theForm, parameters[i].split("=")[0], parameters[i].split("=")[1]);
        }

        theForm.submit();
    //-->
    </script>

</cfif>