integriting facebook login button with Facebooker (rails plugin)
- by dexterdeng
I was integriting login-button with Facebooker, as I wanted to use facepile and customise the facebook login button, so I have to use facebook js sdk.
I used the facebooker to connect facebook. now I found a issue.
window.fbAsyncInit = function() {
FB.init({
appId: '<%=Facebooker.api_key%>',
status: true,
cookie: true,
xfbml: true
});
};
(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 fblogin(){
var pearms = "email,user_birthday,friends_location,offline_access,publish_stream,read_friendlists,user_birthday,user_location";
FB.getLoginStatus(function(response) {
if (response.session) {
// logged in and connected user, someone you know
window.location = "http://domain/account/link_user_accounts";
return true;
} else {
// no user session available, someone you dont know
FB.login(function(response) {
if (response.session) {
if (response.perms) {
// after logged in the facebook account.
$.inspect(response.perms);//return all these perms I expected. it should be fine there.
window.location = "http://domain/account/link_user_accounts";
}
return true;
} else {
return false;
}
},"email,user_birthday,friends_location,offline_access,publish_stream,read_friendlists");
}
})
};
Let's say if the api_key is "1111111111".
take a look at this line: "
` if (response.session) {
if (response.perms) {
$.inspect(response.perms); "
now I was trying to login , call fblogin() ,
I'm sure that the response.perms equal to the perms I expected.
(btw, at that time, I have a facebook plugin named facepile works too, it showed my friends after I called fblogin() and connected to facebook by typing my email and password ).
so now it should run
window.location = "http://domain/account/link_user_accounts";
yes, this line run. but the facebook_session can't build successfully. after digging the facebooker's code,
I found this from the rails plugin facebooker:
def create_facebook_session
secure_with_facebook_params! || secure_with_cookies! || secure_with_token!
end
mostly, it would run secure_with_cookies! , and if the cookies with keys as "fbs_#{Facebooker.api_key}","#{Facebooker.api_key}_ss", "#{Facebooker.api_key}_session_key",.. created, then the facebook_session can be created.
but these cookies can't be created after I logged in facebook until I refresh the current page by hand . I noticed if I refresh the page, the cookies with these keys added to the browser.
but why they can't be added after I logged in facebook at once? I need these keys to create facebook_session. did I forgot something excepted these code I pasted?
anybody help? thank you very much!