[Facebooker-talk] Fwd: [rfacebook] Re: How exactly are session cookies supposed to work? Will ensure_authenticated use them?
Mike Mangino
mmangino at elevatedrails.com
Wed Jan 28 19:03:24 EST 2009
Aaron, thanks for the note.
I like the idea of using params as the default choice. I think that
definitely makes sense.
The post login authorization issue is really ugly. Are you able to get
a canvas url for the post login url? That would be a cleaner way to
solve the problem.
Mike
On Jan 28, 2009, at 6:33 PM, Aaron Nemoyten wrote:
> Hey everyone.
>
> I'm the author of the original post to the Facebook/Ruby group. I
> apologize for not getting over to this list sooner - Kevin Lochner
> emailed me and suggested it last week.
>
> I'm trying to catch up on the discussion here.
>
> Because the app I'm working on is in an iFrame AND we're using Flash
> AND we're relying on cookies to authenticate requests in
> Facebook... we've had a lot of issues.
>
>>> 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.
>
> The problem is navigation within iFrame apps - you get the fb_sig
> parameters and then you have one chance to initialize the session
> correctly... the rest of the time you're basically flying blind.
>
> This gets difficult because cookie settings vary from browser to
> browser, including Safari's very restrictive default behavior which
> prevents cookies from being set and read from within iframes that do
> not match the domain of the main tab URL.
>
> Because Facebooker's default behavior is to initialize sessions from
> the session store BEFORE checking params, it's possible (and very
> easy) to end up with the wrong session if a user simply uses the
> app, logs out of facebook, logs back in, and uses the app again.
>
> My easy fix to that was to make secure_with_facebook_params the
> first choice, followed by secure_with_token, followed by
> session_already_secured (and then cookies... not sure how often
> we're even getting to that at this point). Since these params
> should only come in once anyway, this isn't any more expensive and
> prevents the wrong session from being initialized.
>
> There are still a ton of issues regarding cookie settings and
> setting/getting session. I finally just figured out a problem we
> were having post-login/authorization in Safari that goes something
> like this:
>
> * Application redirects user to login page
> * Login page sends user to app with auth_token parameter
> * Server initializes session with auth_token parameter
> * Service sends response with cookies/session info included
> * Browser refuses to set cookies but renders page
> * Page has javascript to check for cookies and redirects top.href to
> href (my fix - this works when we have fb_sig params because we can
> recreate the session from them, set the cookies, and then redirect
> back into the frame)
> * Params are included, including auth_token, which Facebook refuses
> to turn into a valid session because we already did that once (is
> this what's happening?) and an exception is thrown
> * User sees error.
>
> WARNING: HORRIBLE HACK STARTS HERE!
>
> The best fix I can come up with right now is to remove auth_token
> from the redirect to top, which will cause a redirect BACK to
> apps.facebook.com/appname, which will pass in fb_sig params but fail
> to create the cookie, so the javascript will redirect to top once
> again, but with fb_sig params in the url, which will create the
> session correctly with cookies allowed by all browsers, and redirect
> back into the frame.
>
> So now the question is... what if javascript isn't allowed to read
> the cookie in the first place. Then maybe I have to have Flash ping
> the server (cookies are automatically sent with Flash requests) and
> let the server tell Flash if the cookie is correct, and then Flash
> can call ExternalInterface and force the reload.
>
> ...this is all to get around restrictive browser cookie settings.
> The alternative is to just ask users to change their cookie settings
> and reload, but that seems like it would have a lower success rate.
>
> -Aaron
>
>
>
> _______________________________________________
> Facebooker-talk mailing list
> Facebooker-talk at rubyforge.org
> http://rubyforge.org/mailman/listinfo/facebooker-talk
--
Mike Mangino
http://www.elevatedrails.com
More information about the Facebooker-talk
mailing list