Restricting force_ssl to one controller

Hello everyone

rails3.2 ruby 1.9.3 nginx 1.5 passenger 4

I’m using
force_sslhttp://apidock.com/rails/v3.2.13/ActionController/ForceSSL/ClassMethods/force_sslin
a controller on our site, and certain actions within that controller.

force_ssl :only => [:show, :list, :toilet]

This works great, I can go to the site via http, no problems, and when I
click on the link responding to the controller the https kicks in, and
is
also active on the other actions specified within that controller.

The issue I’m getting is after using that controller, which forces
https,
clicking on any other links within that site still uses https.

That’s not what I imagined to happen, and may cause an issue.

Is the browser caching the https traffic and assuming to use it again?

Is there any way around this?

Any help, greatly appreciated.

V

Ok, I’ve worked out what’s happening.

When you’re on the page that has been forced to be ssl, then all of your
links that use /something will now pick up the https.

So all my main navigation links are pointing to https

I can’t change them as the site won’t work in development then or on any
testing and staging servers.

um, this is a right pain in the arse.

Anyone know a way around it?

How are you generating the URLs for the links?

If you are using something like this:

projects_path

You can change it to this, which will generate a fully qualified URL
(with
host and protocol):

projects_url

And to explicitly break out of HTTPS, you can do the following:

project_url(:protocol => :http)

Hi Tim

They are navigation links in a global template set, haml.

%li.events
%a{ :href => “/events”,:title =>“Events” }
Events

I think I’m stuffed.

Even if I created a subset of the navigation set just for this section
using full URLS, I’m still stuffed in development or any of the other
testing servers with different URLs.

Any other ideas?

Tim, thanks for the help, worked a treat.

You’re not stuffed.

Right now you’re generating the tag manually with the path “/events”

If you switch to Rails helpers to generate the URL, your problems can be
solved. Which helpers you use depends on how your routes are set up.

How do you have your routes set up? Do you have something like this?

resources :events

If so, you can replace your %a link with this:

link_to(‘Events’, events_url(:protocol => ‘http’))