Интересно, мог ли кто-нибудь любезно указать мне в правильном направлении.FacebookWebContext.Current.IsAuthenticated() всегда возвращает false
Я использую facebook C# sdk для аутентификации пользователя. Я реализовал IFacebookApplication в своем global.asax, поэтому на более позднем этапе я могу программно предоставить AppId/AppSecret для разных приложений facebook.
Вот моя текущая настройка
У меня есть этот класс:
public class RequestScopedFacebookApplication : IFacebookApplication
{
public RequestScopedFacebookApplication()
{
}
public IFacebookApplication Current
{
get
{
var url = HttpContext.Current.Request.Url;
var app = new DefaultFacebookApplication();
app.AppId = "xxx";
app.AppSecret = "xxx";
return app;
}
}
public string AppId
{
get { return Current.AppId; }
}
public string AppSecret
{
get { return Current.AppSecret; }
}
public string CancelUrlPath
{
get { return Current.CancelUrlPath; }
}
public string CanvasPage
{
get { return Current.CanvasPage; }
}
public string CanvasUrl
{
get { throw new NotImplementedException(); }
}
public string SecureCanvasUrl
{
get { throw new NotImplementedException(); }
}
public string SiteUrl
{
get { throw new NotImplementedException(); }
}
public bool UseFacebookBeta
{
get { return Current.UseFacebookBeta; }
}
}
В моей global.asax:
void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
Facebook.FacebookApplication.SetApplication(new RequestScopedFacebookApplication());
}
После того, как у меня есть перенаправление URL, Я отправляю пользователя на страницу авторизации, на странице обратного вызова у меня есть что-то вроде этого:
if (Request.QueryString["code"] != null)
{
FacebookOAuthResult result;
if (FacebookOAuthResult.TryParse(Request.Url, out result))
{
if (result.IsSuccess)
{
var code = result.Code;
var oauthClient = new FacebookOAuthClient(FacebookWebContext.Current.Settings);
oauthClient.RedirectUri = new Uri("...");
dynamic parameters = new ExpandoObject();
parameters.redirect_uri = "...";
dynamic tokenResult = oauthClient.ExchangeCodeForAccessToken(code, parameters);
var accessToken = tokenResult.access_token;
var bum = new FacebookClient(accessToken);
}
else
{
var errorDescription = result.ErrorDescription;
var errorReason = result.ErrorReason;
}
}
}
Итак, теперь у меня есть токен. Если я сделаю что-то вроде:
bum.get("/me/feed")
это прекрасно работает, и я возвращаю некоторые данные.
Проблема, с которой я сталкиваюсь, заключается в том, что когда я пытаюсь получить доступ к чему-либо из FacebookWebContext.Current.IsAuthenticated() или FacebookWebContext.Current.UserId, они всегда являются ложными и 0 соответственно. Похоже, что контекст не обновляется после аутентификации пользователя, и у меня есть access_token.
Мне нужно проверить, успешно ли аутентифицирован пользователь и получить его UserId и электронную почту позднее.
Если какая-либо помощь будет принята с благодарностью!
AH! Теперь имеет смысл. Я сошел с ума! Спасибо. – user600314
@prabir У меня такая же проблема. Если я использую только токен, то как я могу получить идентификатор пользователя facebook? – updev
вам нужно сделать запрос на сервер facebook на «/ me», тогда вы можете получить идентификатор, используя result.id – prabir