2011-12-29 3 views
0

Я знаю, что аналогичный вопрос задавали несколько раз, но все же я не могу заставить его работать. Я хочу войти на мой сайт с помощью новейшего фейсбука C# SDK и прочитать зарегистрированное имя пользователя и имя пользователя.Facebook C# sdk login in asp.net 4.0 website

Вот моя конфигурация web.config facebook:

<configSections> 
    <section type="Facebook.FacebookConfigurationSection, Facebook" 
    name="facebookSettings" allowLocation="true" allowDefinition="Everywhere" /> 
    </configSections> 
    <facebookSettings appId = "{appId}" appSecret = "{appSecret}"/> 

Вот мой facebook SDK и на стороне клиента код:

Your facebook name is :<asp:Label ID="Label1" runat="server" Text="Not authenticated."></asp:Label> 

<div id="fb-root"> 
</div> 
<fb:login-button id="fblogin" onlogin="window.open('http://www.filmania.pl/Default.aspx?code=1', '_self')"> 
</fb:login-button> 
<fb:prompt-permission perms="email"></fb:prompt-permission> 
<script> 
    window.fbAsyncInit = function() { 
     FB.init({ 
      appId: 'applicationId', 
      cookie: true, 
      xfbml: true, 
      oauth: true 
     }); 
     function facebooklogin() { 
      FB.login(function (response) { 
       if (response.authResponse) { 
        // user authorized 
        //window.location.reload(); 
        window.open("http://www.filmania.pl/Default.aspx?code=1", "_self") 
       } else { 
        // user cancelled 
       } 
      }, { scope: 'email' }); 
     }; 
    }; 
    (function() { 
     var e = document.createElement('script'); e.async = true; 
     e.src = document.location.protocol + '//connect.facebook.net/en_US/all.js'; 
     document.getElementById('fb-root').appendChild(e); 
    }()); 
</script> 

Это мой код на стороне сервера:

if (Request.QueryString["code"] == "1") 
    { 
     try 
     { 
      var fbWebContext = new FacebookWebContext(); 
      Label1.Text += fbWebContext.IsAuthenticated(); 

      if (fbWebContext.IsAuthenticated()) 
      { 
       var fb = new FacebookWebClient(); 
       dynamic me = fb.Get("me"); 
       Label1.Text += me.email + " " + me.name; 
      } 

     } 
     catch (Exception ex) 
     { 
      Label1.Text += ex; 
     } 
    } 

После нажатия кнопки входа в систему Facebook появляется всплывающее окно facebook и запрашивает разрешение. Кажется, что все нормально, но после серверного кода magic Label1.Text всегда == false. Что мне здесь не хватает? Пожалуйста, помогите мне, я потерян.

ответ

0

В SDK для Javascript вы должны позвонить FB.getLoginStatus , предшествующий, к вызову FB.login. Это может изменить ваш рабочий процесс.

См: https://developers.facebook.com/docs/reference/javascript/FB.getLoginStatus/ и https://developers.facebook.com/docs/reference/javascript/FB.login/

+0

Благодарим за отзыв. Наконец, мне удалось сделать это с помощью FB.Login. Я добавил этот код на сервер: var app = new DefaultFacebookApplication(); app.AppId = "appIUd"; app.AppSecret = "appSecret"; var fbWebContext = new FacebookWebContext (приложение); Неправильно ли использовать FB.login или я могу оставить его таким образом? – user964986

+0

Хорошо, я поменял его на FB.getLoginStatus и его работу в любом случае. Спасибо. – user964986

+0

Whew! Я рад, что вы поняли это. Счастливое кодирование! – DMCS

0

Я работал с более старыми версиями facebook SDK API, но я сейчас я сделал пример для новейшей стабильной версии 5.4.1.0 Wich я нашел на CodePlex ...

пример находится здесь: http://www.simpa.dk/Projects.aspx?CategoryId=1&IndexId=2

надеюсь, что это может помочь другим ... :) .