Sorry about this mess, but I just figured it out what was really happening
and fixed it.

Rails probably always interpret the plus sign as a white space, but
everything started because I couldn't find how the authenticity_token is
sent using <%= link_to "Destroy", [@client, address], :confirm => 'Are you
sure?', :method => :delete %>, initially I thought it was sent without any
encoding. So I couldn't say the difference between the request generated by
the link_to method and my ajax request ( Started DELETE
"/clients/118/files/20?authenticity_token=hoMH9/heaFWXWWy+aE1xKQcpf4xrLoVWGqkq0pzzwuo="
for 127.0.0.1 at Wed Apr 27 23:06:50 -0300 2011 ).

I think Rails under the hood encode the authenticity_token before sending
it. So, now i'm doing it on javascript:

token_param = "authenticity_token=" + encodeURIComponent(token);

And this generates: "authenticity_token=
hoMH9%2FheaFWXWWy%2BaE1xKQcpf4xrLoVWGqkq0pzzwuo%3D"


Then, it's solved! Thanks for all the help!

Ernesto


On Sat, Apr 30, 2011 at 9:56 PM, Ernesto Rocha <[email protected]>wrote:

> I'm using csrf_meta_tag and the the headers appears correctly. The problem
> is when the athenticity_token has a plus sign and I use any of Jquery ajax
> function. So I tried to render the form_authenticity_token already escaped
> using that method above ( CGI.escape), but now the jquery ajax function
> works and this line isn't working anymore(when i click):
>
> <%= link_to "Destroy", [@client, address], :confirm => 'Are you sure?',
> :method => :delete %>
>
> After the click there ins't user session anymore:
>
> Started POST "/clients/97" for 127.0.0.1 at Sat Apr 30 21:49:15 -0300 2011
>   Processing by ClientsController#destroy as HTML
>   Parameters:
> {"authenticity_token"=>"MCVYdvbAS4i7BiRaDZig9VHXbxltKo84BgDT%2BTL28%2BI%3D",
> "id"=>"97"}
>
>
> When I use ajax is ok:
>
> Started DELETE
> "/clients/118/files/9?authenticity_token=MCVYdvbAS4i7BiRaDZig9VHXbxltKo84BgDT%2BTL28%2BI%3D"
> for 127.0.0.1 at Sat Apr 30 21:48:52 -0300 2011
>   Processing by ClippingsController#destroy as JS
>   Parameters:
> {"authenticity_token"=>"MCVYdvbAS4i7BiRaDZig9VHXbxltKo84BgDT+TL28+I=",
> "id"=>"9,", "client_id"=>"118"}
>
> In both cases the csrf header is exactly the same and i'm using the
> CGI.escape method.
>
> Any help ?
>
> Thanks,
> Ernesto
>
>
> On Sat, Apr 30, 2011 at 9:27 AM, Frederick Cheung <
> [email protected]> wrote:
>
>>
>>
>> On 30 Apr 2011, at 12:48, Ernesto Rocha <[email protected]> wrote:
>>
>> I did some brute force only to test, like this:
>>
>> <meta name="csrf-param" content="authenticity_token"/>
>> <meta name="csrf-token" content="<%= CGI.escape form_authenticity_token
>> %>"/>
>>
>> some characters are escaped, but now the link_to ... :method => delete is
>> not working anymore (the user session is killed).
>>
>> If I user URI.escape the plus sign is not escaped.
>>
>>
>> How are you adding the authenticity token to the URL ?  (Ps, rails has a
>> csrf_meta_tag helper)
>>
>> Fred
>>
>> So, i'm still at point zero.
>>
>> Thanks,
>> Ernesto
>>
>>
>> On Fri, Apr 29, 2011 at 6:10 AM, Frederick Cheung 
>> <<[email protected]>
>> [email protected]> wrote:
>>
>>>
>>>
>>> On Apr 29, 3:06 am, Ernesto Rocha <[email protected]> wrote:
>>> > How i escape it before the rails server process it ?
>>> >
>>> You'll need to do that at the point that you add the token to the link
>>>
>>> Fred
>>> > Thanks,
>>> > Ernesto
>>> >
>>> > On Thu, Apr 28, 2011 at 4:58 AM, Frederick Cheung <
>>> >
>>> >
>>> >
>>> > [email protected]> wrote:
>>> >
>>> > > On 28 Apr 2011, at 03:22, Ernesto Rocha <[email protected]>
>>> wrote:
>>> >
>>> > > Guys,
>>> >
>>> > > I'm using some AJAX on my application, but when protect_from_forgery
>>> is on
>>> > > sometimes it works and sometimes the user session is killed. Today i
>>> found
>>> > > out why.
>>> >
>>> > > It happens the following:
>>> >
>>> > > The authenticity_token is sent correctly as you can see below,
>>> >
>>> > > Started DELETE
>>> > >
>>> "/clients/118/files/20?authenticity_token=hoMH9/heaFWXWWy+aE1xKQcpf4xrLoVWG
>>> qkq0pzzwuo="
>>> > > for 127.0.0.1 at Wed Apr 27 23:06:50 -0300 2011
>>> >
>>> > > but, next line on server is,
>>> >
>>> > > Processing by ClippingsController#destroy as JS
>>> > >   Parameters: {"authenticity_token"=>"hoMH9/heaFWXWWy
>>> > > aE1xKQcpf4xrLoVWGqkq0pzzwuo=", "id"=>"20,", "client_id"=>"118"}
>>> >
>>> > > as you can see, the plus sign ('+') turned into a white space. Once
>>> the
>>> > > token doesn't match the user session is killed.
>>> >
>>> > > Is someone experiencing this ? Any help how to fix it ?
>>> >
>>> > > + in urls means space - if the token genuinely contains + then you
>>> need to
>>> > > escape it before putting it in the URL.
>>> >
>>> > > Fred
>>> >
>>> > > Thanks,
>>> > > Ernesto
>>> >
>>> > > --
>>> > > You received this message because you are subscribed to the Google
>>> Groups
>>> > > "Ruby on Rails: Talk" group.
>>> > > To post to this group, send email to
>>> <[email protected]>[email protected].
>>> > > To unsubscribe from this group, send email to
>>> > > <rubyonrails-talk%[email protected]>
>>> [email protected].
>>> > > For more options, visit this group at
>>> > > <http://groups.google.com/group/rubyonrails-talk?hl=en>
>>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>> >
>>> > >  --
>>> > > You received this message because you are subscribed to the Google
>>> Groups
>>> > > "Ruby on Rails: Talk" group.
>>> > > To post to this group, send email to
>>> <[email protected]>[email protected].
>>> > > To unsubscribe from this group, send email to
>>> > > <rubyonrails-talk%[email protected]>
>>> [email protected].
>>> > > For more options, visit this group at
>>> > > <http://groups.google.com/group/rubyonrails-talk?hl=en>
>>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>>
>>> --
>>> You received this message because you are subscribed to the Google Groups
>>> "Ruby on Rails: Talk" group.
>>> To post to this group, send email to <[email protected]>
>>> [email protected].
>>> To unsubscribe from this group, send email to
>>> <rubyonrails-talk%[email protected]>
>>> [email protected].
>>> For more options, visit this group at
>>> <http://groups.google.com/group/rubyonrails-talk?hl=en>
>>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>>
>>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Talk" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>
>>  --
>> You received this message because you are subscribed to the Google Groups
>> "Ruby on Rails: Talk" group.
>> To post to this group, send email to [email protected].
>> To unsubscribe from this group, send email to
>> [email protected].
>> For more options, visit this group at
>> http://groups.google.com/group/rubyonrails-talk?hl=en.
>>
>
>

-- 
You received this message because you are subscribed to the Google Groups "Ruby 
on Rails: Talk" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to 
[email protected].
For more options, visit this group at 
http://groups.google.com/group/rubyonrails-talk?hl=en.

Reply via email to