与this closed question相似,但我会更精确,所以希望有答案:)
我正在将Facebook登录按钮添加到一个全部使用经典ASP的网站,我是Facebook SDK / API的新手,https://developers.facebook.com/docs/authentication提供了所有代码示例用PHP。我需要通过一些COM函数将一些FB用户信息传递给服务器的数据库,所以我将使用服务器端身份验证。到现在为止还挺好。服务器端身份验证不会直接为我提供访问令牌虽然它为我提供了代码,而我主要是了解PHP示例把它变成访问令牌,
$token_url = "https://graph.facebook.com/oauth/access_token?"
. "client_id=" . $app_id . "&redirect_uri=" . urlencode($my_url)
. "&client_secret=" . $app_secret . "&code=" . $code;
$response = @file_get_contents($token_url);
$params = null;
parse_str($response, $params);
$graph_url = "https://graph.facebook.com/me?access_token="
. $params['access_token'];
$user = json_decode(file_get_contents($graph_url));
我真的不知道ASP / VBScript的方法可以做上面的任何一个。 PHP提供了比ASP更多的内置函数,如urlencode
,file_get_contents
,parse_str
,它足够智能地将字符串视为查询参数,我甚至不知道是否我想要或需要json_decode
之类的东西!
对于file_get_contents,我正在考虑尝试像
这样的东西fbApiCode = Request.QueryString("code")
if len(fbApiCode) > 0 then
set xmlHttp = Server.CreateObject("Microsoft.XMLHTTP")
appAuth = "https://graph.facebook.com/oauth/access_token?client_id=" & _
Application("fbAppId") & "&redirect_uri=" & Application("fbRedirectUri") & "&client_secret=" _
Application("fbAppSecret") & "&code=" & fbApiCode
xmlHttp.open("GET", appAuth, false) ' or post?
accessResponse = xmlHttp.responseText
这是否接近正确的方法还是我在跑兔子洞?如果我不能仅使用VBScript将代码转换为访问令牌,我将使用FB.getLoginStatus()
在JavaScript中获取FB用户的信息(名称,电子邮件等)并使用AJAX将其发送到我的服务器我知道这不是非常安全,所以我想避免诉诸于此。
答案 0 :(得分:1)
我知道这是一个旧线程,但这个解决方案可能对某人有帮助。
您需要使用代码请求令牌,然后使用令牌请求用户信息。
<script language="javascript" runat="server">
"use strict";
function getJSON(strOrObject){
if (typeof strOrObject == "string") {
return eval("(" + strOrObject + ")");
}
return strOrObject;
}
</script>
<%
fbClientToken = [[CLIENTTOKEN]]
fbAppID = [[APPID]]
fbAppSecret = [[APPSECRET]]
fbAuthURL = "https://www.facebook.com/dialog/oauth"
fbTokenURL = "https://graph.facebook.com/v2.3/oauth/access_token"
fbOAuthCallback = [[CALLBACKURL]]
fbScope = "public_profile,email"
if request("go")="login" then
Randomize
nonce = Rnd
response.redirect fbAuthURL & "?response_type=code&client_id=" & fbAppID & "&redirect_uri=" & Server.URLEncode(fbOAuthCallback) & "&scope=" & fbScope & "&state=" & nonce
else
if request("code") <> "" then
information = "client_id=" & fbAppID & "&redirect_uri=" & Server.URLEncode(fbOAuthCallback) & "&client_secret=" & fbAppSecret & "&code=" & request("code")
Set xmlhttp = server.Createobject("MSXML2.ServerXMLHTTP")
xmlhttp.Open "GET", fbTokenURL & "?" & information, false
xmlhttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
xmlhttp.send
respText = xmlhttp.ResponseText
if InStr(respText,"access_token") then
dim respJSON : set respJSON = getJSON(respText)
getURL = "https://graph.facebook.com/me?access_token=" & respJSON.access_token
xmlhttp.Open "GET", getURL, false
xmlhttp.setRequestHeader "Content-Type","application/x-www-form-urlencoded"
xmlhttp.send
respToken = xmlhttp.ResponseText
%><h1>Token Inspection Response</h1><%
if InStr(respToken,"{") and InStr(respToken,"}") then
dim userJSON : set userJSON = getJSON(respToken)
response.write "<br/>ID: " & userJSON.id
response.write "<br/>email: " & userJSON.email
response.write "<br/>first_name: " & userJSON.first_name
response.write "<br/>last_name: " & userJSON.last_name
response.write "<br/>name: " & userJSON.name
response.write "<br/>gender: " & userJSON.gender
response.write "<br/>locale: " & userJSON.locale
response.write "<br/>verified: " & userJSON.verified
response.write "<br/>link: " & userJSON.link
response.write "<br/>timezone: " & userJSON.timezone
else
%><h1>Invalid Inspection Response</h1><%=respToken%><%
end if
else
%><h1>Invalid Response</h1><%=respText%><%
end if
end if
end if
%>