[Facebooker-talk] Fwd: [rfacebook] Re: How exactly are session cookies supposed to work? Will ensure_authenticated use them?

kevin lochner klochner at gmail.com
Fri Jan 23 13:08:16 EST 2009


See below for a message I picked this up on the rfacebook google group  
mailing list.

I'm concerned with whether session_already_secured? is an accurate  
indicator
of facebook connection status.    Bear with me while I step through  
the logic, where
I've included just the meat of the functions below:

session_already_secured?
 > (@facebook_session = session[:facebook_session]) &&  
session[:facebook_session].secured? if valid_session_key_in_session?

session.secured?
 >  !@session_key.nil? && !expired?

valid_session_key_in_session?
  >  !session[:facebook_session].blank? &&
  >  (params[:fb_sig_session_key].blank? ||  
session[:facebook_session].session_key == facebook_params[:session_key])

The problem for connect is if the following sequence happens:
    - user comes to your site and logs in via facebook,
    - user goes to facebook in another browser tab and logs out
    - user returns to your site

The connect app will have the following state:
   - session[:facebook_session]
   - @session_key && !expired?
   - params[:fb_sig_session_key].blank?

So they're technically still logged in and your app will throw an  
exception when trying to access user info.

One solution for a pure connect app is that the session is invalid if  
the cookies aren't present.  They don't
need to be verified on each request, but they should be checked for  
existence.

I don't know the best way to handle this because I don't know what  
would cause the params[:fb_sig_session_key]
to be blank in non-connect apps while the user is still logged in.   
Can someone fill me in?

- kevin


Begin forwarded message:

> From: Aaron Nemoyten <swivelmaster at gmail.com>
> Date: January 21, 2009 6:23:51 PM EST
> To: All Things Facebook and Ruby <rfacebook at googlegroups.com>
> Subject: [rfacebook] Re: How exactly are session cookies supposed to  
> work? Will  ensure_authenticated use them?
> Reply-To: rfacebook at googlegroups.com
>
>
> Well, I've got an update yet again!
>
> Seems that it's possible that new sessions aren't created when they
> should be sometimes because of the order that Facebooker checks for
> valid session info.
>
> If you check out ensure_authenticated_to_facebook, you'll see this:
> def set_facebook_session
>        returning session_set = session_already_secured? ||
> secure_with_facebook_params! || secure_with_cookies! ||
> secure_with_token!
> (etc.)
>
> Grabbing the old session if there is new session info available from
> the facebook_params seems to cause some problems, as well as trying to
> secure with cookies if there's an auth token available (usually
> involving my Safari iframe fix - we can pop out of the iframe with the
> auth token but no params, and Facebooker will grab the old cookie,
> thus rendering the iframe fix potentially useless.
>
> So my preferred order is params, session, auth token, cookies.
>
> Another issue I ran into (which may not be relevant since I moved the
> cookie auth method last) is that cookies from invalid sessions will
> make Facebooker throw an error when all I'd really want to do is just
> ignore them and make a new session, so I rescued secure_with_cookies!
> for Facebooker::Session::IncorrectSignature and just returned false.
>
> Not sure if I mentioned this before, but it's also necessary to modify
> request_comes_from_facebook? to make sure it doesn't incorrectly
> return false because it's looking for canvas-specific parameters.
>
> This seems to have fixed some problems for now.
>
> -Aaron
>
>
>
>
> On Jan 19, 12:56 am, PanosJee <pap... at freemail.gr> wrote:
>> Aaron your posts are highly appreciated, keep up
>> We also hope to post a few hints, unfortunately IFrames are badly
>> supported though they are superior technology compared to the limited
>> plain FBML apps
> --~--~---------~--~----~------------~-------~--~----~
> You received this message because you are subscribed to the Google  
> Groups "All Things Facebook and Ruby" group.
> To post to this group, send email to rfacebook at googlegroups.com
> To unsubscribe from this group, send email to rfacebook+unsubscribe at googlegroups.com
> For more options, visit this group at http://groups.google.com/group/rfacebook?hl=en
> -~----------~----~----~----~------~----~------~--~---
>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/facebooker-talk/attachments/20090123/7cc8b26a/attachment.html>


More information about the Facebooker-talk mailing list