使用Facebook C#SDK在登陆页面上获取AccessToken

时间:2011-03-08 15:34:09

标签: c# asp.net facebook facebook-c#-sdk

编码平台ASP.NET 4.0 WebForms

我有两个与此相关的页面

  1. 的Login.aspx
  2. LandingPage.aspx
  3. 当我点击ImageButton时登录Login.aspx,我使用以下代码重定向到Facebook网站

    protected void FacebookLoginButton_Click(object sender, ImageClickEventArgs e)
    {
        try
        {
            Response.Redirect(GetFacebookLoginURL());
        }
        catch (System.Threading.ThreadAbortException)
        {
            throw;
        }
        catch (Exception err)
        {
            Elmah.ErrorSignal.FromCurrentContext().Raise(err);
        }
    }
    
    private string GetFacebookLoginURL()
    {
        try
        {
            string baseURL = System.Configuration
                .ConfigurationManager
                .AppSettings["WebsiteURL"]
                .ToString();
    
            string[] extendedPermissions = new[] { 
                "publish_stream", 
                "offline_access" 
            };
    
            var oauth = new FacebookOAuthClient { 
                ClientId = FacebookContext.Current.AppId 
            };
    
            var parameters = new Dictionary<string, object>{
                { "response_type", "token" },
                { "display", "page" }
            };
    
            if (extendedPermissions != null && extendedPermissions.Length > 0)
            {
                var scope = new StringBuilder();
                scope.Append(string.Join(",", extendedPermissions));
    
                parameters["scope"] = scope.ToString();
            }
            parameters["redirect_uri"] = String.Format("{0}LandingPage.aspx", baseURL);
            return oauth.GetLoginUrl(parameters).OriginalString;
        }
        catch (Exception err)
        {
            Elmah.ErrorSignal.FromCurrentContext().Raise(err);
            return "";
        }
    }
    

    该部分正常运作。但我对如何在LandingPage访问用户信息毫无头绪,这是我的redirect_uri。试过这个。

        FacebookOAuthClient cl = new FacebookOAuthClient(FacebookContext.Current);
        FacebookOAuthResult result = null; 
        string url = Request.Url.AbsoluteUri;
    
        // verify that there is a code in the url
        if (FacebookOAuthResult.TryParse(url, out result))
        {
            if (result.IsSuccess)                               
            {
                var accesstoken = result.AccessToken;
            }
            else
            {
                var errorDescription = result.ErrorDescription;
                var errorReason = result.ErrorReason;
            }
        }
    

    但我怀疑它不会工作,因为我在服务器端没有window.hash.location(它无论如何都没有工作)

        var client = new FacebookClient(FacebookContext.Current);
        dynamic me = client.Get("me");
        string firstName = me.first_name;
        string lastName = me.last_name;
        string email = me.email;
    

    虽然我不确定,获取Access Token会解决我的问题,不是吗? 这是我得到的错误。

      

    (OAuthException)活动访问   必须使用令牌进行查询   有关当前用户的信息。

    我做错了什么?

3 个答案:

答案 0 :(得分:1)

这是使用webforms的独立网站示例。查看Default.aspx.csWeb.config。请注意,此示例可能会被修改以用于latest source code,并且可能无法与最新版本(5.0.3 beta)一起使用。

答案 1 :(得分:0)

我刚刚做了这个实现。要访问“我”,您需要具有访问令牌。

实施非常简单,但是,我会说我发现我的主要绊脚石是确保我的“Login.aspx”网址中的redirect_uri与我的目标网页中的redirect_uri相匹配。

答案 2 :(得分:0)

一定很简单,但我没理解。所以我用了较少的Facebook C# SDK by Facebook。我非常did what this blog suggested。一切都很好。