#c# #asp.net #facebook-graph-api #facebook-javascript-sdk #facebook-login
Вопрос:
Я пытаюсь подключиться к API Facebook, чтобы авторизовать доступ для получения данных профиля для процесса входа в систему, вот мой код:
string facebook_urlAuthorize_base = "https://graph.facebook.com/oauth/authorize";
string facebook_urlGetToken_base = "https://graph.facebook.com/oauth/access_token";
string facebook_AppID = "APPID";
string facebook_AppSecret = "APPSECERET";
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
if (Request["code"] != null)
{
string authorizationCode = Request["code"];
string access_token = Facebook_GetAccessToken(authorizationCode);
if (access_token == "")
{
Response.Write("Could not get access_token");
return;
}
}
}
}
protected void Login(object sender, EventArgs e)
{
Facebook_AuthorizeApplication();
}
private void Facebook_AuthorizeApplication()
{
string scope = "name,email";
string urlAuthorize = facebook_urlAuthorize_base;
urlAuthorize = "?client_id=" facebook_AppID;
urlAuthorize = "amp;redirect_uri=" Facebook_GetRedirectUri();
urlAuthorize = "amp;scope=" scope;
Response.Redirect(urlAuthorize, true);
}
private string Facebook_GetAccessToken(string pAuthorizationCode)
{
string urlGetAccessToken = facebook_urlGetToken_base;
urlGetAccessToken = "?client_id=" facebook_AppID;
urlGetAccessToken = "amp;client_secret=" facebook_AppSecret;
urlGetAccessToken = "amp;redirect_uri=" Facebook_GetRedirectUri();
urlGetAccessToken = "amp;code=" pAuthorizationCode;
string responseData = RequestResponse(urlGetAccessToken);
if (responseData == "")
{
return "";
}
NameValueCollection qs = HttpUtility.ParseQueryString(responseData);
string access_token = qs["access_token"] == null ? "" : qs["access_token"];
return access_token;
}
Получите ответ на сообщение об ошибке от Facebook:
{
"error": {
"message": "Can't Load URL: The domain of this URL isn't included in the app's domains. To be able to load this URL, add all domains and subdomains of your app to the App Domains field in your app settings.",
"type": "OAuthException",
"code": 191,
"fbtrace_id": "A5K3mmpL-3LosCnW4b6Nv_9"
}
}
Я вызываю API из http://localhost:13193/user/Default.aspx
Я попытался изменить настройки приложения на странице разработчиков dashboard Facebook:
URL-АДРЕС сайта: http://localhost:13193/user/
Домен приложения: localhost
Я также установил URL-адрес политики конфиденциальности, используя веб-сайт «Создать политику конфиденциальности».
Что я делаю не так, любая помощь будет оценена по достоинству. Спасибо
Я переключился на JavaScript SDK для Facebook, и мне удалось подключиться к Facebook, и я получил токен только один раз, когда я попытался получить доступ к токену, он возвращается пустым.
<div class="fb-login-button" onclick="checkLoginState()"
scope="public_profile,email">Login with Facebook</div>
<!-- <asp:HiddenField runat="server" /> -->
<div id ="FBToken"></div>
window.fbAsyncInit = function () {
FB.init({
appId: '501435960911890',
cookie: true,
xfbml: true,
version: 'v10.0'
});
FB.AppEvents.logPageView();
};
(function (d, s, id) {
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) { return; }
js = d.createElement(s); js.id = id;
js.src = "https://connect.facebook.net/en_US/sdk.js";
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));
function checkLoginState() {
FB.login(function (response) {
if (response.authResponse) {
alert('You are logged in amp; cookie set!');
} else {
alert('User cancelled login or did not fully authorize.');
}
});
FB.getLoginStatus(function (response) {
// $("#Facebook_Token").value = JSON.stringify(response, null, 2);
$("#FBToken").html("<code>" JSON.stringify(response, null, 2) "</code>")
});
}
Комментарии:
1. Какое точное значение
redirect_uri
имеет параметр в URL-адресе диалогового окна входа, на который вы перенаправляете? Этот параметр необходимо установить в настройках вашего приложения для допустимых URI перенаправления OAuth. Вы также указали домен приложения и настроили платформу веб-сайта?2. Да, я сделал все это, и это было успешно выполнено для JavaScript SDK только один раз 🙁
3. Это асинхронные методы, поэтому сначала вызывать
FB.login
, а затемFB.getLoginStatus
непосредственно после этого имеет мало смысла.