我想知道是否有人能指出我正确的方向。
我正在使用facebook c#sdk来验证用户身份。我已经在我的global.asax中实现了IFacebookApplication,所以在以后我可以以编程方式为不同的facebook应用程序提供AppId / AppSecret。
这是我当前的设置
我有这堂课:
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());
}
获得重定向网址后,我将用户发送到授权页面,在回调页面上,我有这样的内容:
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访问某些内容时,它们总是分别为false和0。一旦用户通过身份验证并且我有access_token,就看起来Context不会更新。
我需要能够检查用户是否已成功通过身份验证,并在以后获取其UserId和电子邮件。
如果有任何帮助将不胜感激!
答案 0 :(得分:1)
这是预期的行为。
FacebookWebContext.Current.IsAuthorized检查facebook cookie或facebook signed_request以了解它是否经过身份验证。由于您使用的不使用javascript sdk或在canvas应用程序中,它将始终返回false。
获得ExchangeCodeForAccessToken()后,将其安全地存储在某处,然后使用您自己的自定义登录。然后使用它来了解用户是否已登录。 (例如,您可能希望使用FormsAuthentication或甚至汇总您的自定义身份验证。)