Вопрос о кнопке входа в Facebook - PullRequest
0 голосов
/ 31 августа 2011

Я пытаюсь внедрить систему входа и регистрации через Facebook. Я использую код ниже:

<div id="fb-root"></div>

<script type="text/javascript">
window.fbAsyncInit = function() {
 FB.init({appId: 'MYAPPIDHERE', status: true, cookie: true, xfbml: true});

     FB.Event.subscribe('auth.login', function(response) {
         window.location = "https://domain.com/fblogin.aspx";
     });
     FB.Event.subscribe('auth.logout', function(response) {
         window.location.reload();
     });

 };
 (function() {
        var e = document.createElement('script');
        e.type = 'text/javascript';
        e.src = document.location.protocol +
            '//connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
 }());

</script>

<fb:login-button autologoutlink="true" perms="email,offline_access" registration-url="https://domain.com/register_fb.aspx" />

Мне нужен совет. В настоящее время, если я вошел в Facebook, страница автоматически запускает событие 'auth.login' и перенаправляет меня в мое приложение. Это прекрасно работает, но я хотел бы предотвратить такое поведение. В идеальном мире было бы неплохо, если бы кнопка входа в Facebook запускала событие «auth.login» только при нажатии.

Что ты думаешь? Должен ли я удалить кнопку fb: login и создать собственную кнопку, связанную с событием onclick? Если да, то есть ли хорошие примеры, которыми вы можете поделиться?

Спасибо

Ответы [ 2 ]

1 голос
/ 31 августа 2011

Я думаю, вы должны сохранить код, который у вас есть.Присвойте fb: login-button идентификатор (скажем, id = "fb_loginbutton") и оберните ваш ...

window.location = "https://domain.com/fblogin.aspx";

... в нечто подобное ...

var fb_loginbutton = document.getElementById('fb_loginbutton');
fb_loginbutton.onclick = function() {
    window.location = "https://domain.com/fblogin.aspx";
}

(Это входит в функцию Event.subscribe ... auth.login.)

Таким образом, успешное действие при входе в систему не перенаправляет браузер, а просто говорит о кнопке перенаправления при нажатии.

Если кнопка Facebook не говорит правильную вещь, то вы можете изменить ее HTML, чтобы сказать что-то более полезное ...

fb_loginbutton.innerHTML = "Click here to continue";

... или свернуть свою собственную.

Надеюсь, это поможет!

0 голосов
/ 02 сентября 2011

Обновление Мне удалось найти работоспособное решение:

<div id="fb-root"></div>
<script type="text/javascript">
window.fbAsyncInit = function() {
 FB.init({appId: 'MYAPPID', status: true, cookie: true, xfbml: true});

     FB.Event.subscribe('auth.login', function(response) {
         login();
     });

     FB.getLoginStatus(function(response) {
         if (response.session) {
             login();
         }
     });

 };
 (function() {
        var e = document.createElement('script');
        e.type = 'text/javascript';
        e.src = document.location.protocol +
            '//connect.facebook.net/en_US/all.js';
        e.async = true;
        document.getElementById('fb-root').appendChild(e);
 }());

 function login() {

     var fb_loginbutton = document.getElementById('fb_loginbutton');

    $('.fb_button_text').html('Continue to your account...');

    fb_loginbutton.onclick = function() {
        window.location = "https://domain.com/login_controller.aspx";
    }

 }
 </script>

Моя страница login_controller.aspx выглядит следующим образом:

Защищенный Sub Page_Load (ByVal отправитель как объект, ByVal и как система.EventArgs) Обрабатывает Me.Load

Dim FacebookAPPID As String = "MY_FB_APP_ID"

If Request.Cookies("fbs_" & FaceBookAppID) Is Nothing Then
    'Response.Redirect("error.aspx")
End If

Dim cookie As String = Request.Cookies("fbs_" & FaceBookAppID).Value
cookie = cookie.Replace("""", "")

Dim facebookValues As NameValueCollection = HttpUtility.ParseQueryString(cookie)

'Response.Write(facebookValues("access_token"))
'Response.Write("<br><br>")
'Response.Write(facebookValues("secret"))
'Response.Write("<br><br>")
'Response.Write(facebookValues("session_key"))
'Response.Write("<br><br>")
'Response.Write(facebookValues("sig"))
'Response.Write("<br><br>")
'Response.Write(facebookValues("uid"))

doLogin(facebookValues("uid").ToString)

End Sub

У меня есть один вопрос> Было бы полезно хранить какую-то зашифрованную строку AES вместе с идентификатором пользователя facebook в моей базе данных?Я использую этот процесс для регистрации:

<div id="fb-root"></div>
<script>
  window.fbAsyncInit = function() {
    FB.init({appId: 'MY_APP_ID', status: true, cookie: true, xfbml: true});
  };
  (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>


<fb:registration fields="[{'name':'name', 'view':'prefilled'},{'name':'username', 'view':'not_prefilled', 'description':'Username','type':'text'},{'name':'password', 'view':'not_prefilled', 'description':'Password','type':'text'},{'name':'lastname', 'description':'Last name','type':'text'},{'name':'email'},{'name':'accountnumber', 'description': ' Account number','type':'text'}]" onvalidate="validate_async" redirect-uri="https://domain.com/fbregister.aspx"></fb:registration>

<script> 
function validate_async(form, cb) {

    tmp = form.accountnumber;
    tmp = tmp.split("-");

    if (tmp.length != 2) {
        cb({'accountnumber': 'Please include the dash in your account number. Example: xxxxx-xxxxxx.'});
    } 

    if (form.username) {

        if (form.username.length > 0) {

            $.getJSON('checkUsernameExists.aspx?username=' + form.username, 
                function(response) {
                    if (response.error) {
                        cb({username: 'That username is taken'});
                    }
                    cb();
            });

        }

    } else {
        cb();
    }

}
</script> 

Мой fbregister.aspx использует библиотеку JSON.net для разбора ответа facebook:

Dim FBAppID As String, FBSecret As String, dataКак JObject FBAppID = "MY_FB_ID" FBSecret = "MY_FB_SECRET"

data = ClientSite.Classes.Facebook.DecodeFacebookRequest(HttpContext.Current.Request.Form("signed_request"), FBSecret)

Response.Write(data)

Каковы наилучшие методы хранения идентификатора пользователя с паролем?Я думал об использовании AES для шифрования пароля.ID пользователя будет passphase, секрет Facebook будет солью, а системный ключ компьютера будет с текстом.

Когда кто-то пытается войти в систему с помощью facebook, он генерирует зашифрованный пароль и сравнивает его с паролем, хранящимся вдб.По сути, это обеспечит дополнительный уровень безопасности.Мысли?

...