Changing URL from domain.com to subdomain.domain.com on login

Hi all,

Ive got a login form for users with the fields subdomain, username and password. This is at the URL http://domain.com.

When the user submits the form and login is successful, i need the URL to change to http://subdomain.domain.com/whatever. How can I do this?

My try was

if no_subdomain?     redirect_to "http://#{params[:subdomain]}.domain.com/whatever" else     redirect_to whatever_path end

But I think the session data is lost when you redirect like above. So it takes me back to the login form. Any ideas?

Hi all,

Ive got a login form for users with the fields subdomain, username and password. This is at the URLhttp://domain.com.

When the user submits the form and login is successful, i need the URL to change tohttp://subdomain.domain.com/whatever. How can I do this?

You need to set your session cookie to apply to the whole domain (so that when it is set from the page at domain.com it is also sent when the browser requests subdomain.domain.com. It's one of the session options you can set in environment.rb

Fred

Hi all,

Ive got a login form for users with the fields subdomain, username and password. This is at the URLhttp://domain.com.

When the user submits the form and login is successful, i need the URL to change tohttp://subdomain.domain.com/whatever. How can I do this?

You need to set your session cookie to apply to the whole domain (so that when it is set from the page at domain.com it is also sent when the browser requests subdomain.domain.com. It's one of the session options you can set in environment.rb

Fred

My try was

if no_subdomain? redirect_to "http://#{params[:subdomain]}.domain.com/whatever" else redirect_to whatever_path end

But I think the session data is lost when you redirect like above. So it takes me back to the login form. Any ideas?

Set the following in your config/environments/production.rb file: ActionController::Base.session_options[:session_domain] = 'domain.com' This will store the session cookie on domain.com which will then also be readable on subdomain.domain.com

Andrew Timberlake http://ramblingsonrails.com http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain

Hi Fred, Andrew,

Thanks a lot! I did some searching on this. Mainly because it still isnt working for me.

It still leads me back to the login page after failing the before_filter :login_required callback on dashboard_controller.

Im using Rails 2.1.0 so I understand the option is still session_options[:session_domain] for me (as opposed to session_options [:domain] for 2.2.0+)

By the way, ive tried setting ActionController::Base.session_options [:session_domain] to both 'domain.com' and '.domain.com' but both give me the problems.

Any idea what might be wrong?

Im using Rails 2.1.0 so I understand the option is still session_options[:session_domain] for me (as opposed to session_options [:domain] for 2.2.0+)

By the way, ive tried setting ActionController::Base.session_options [:session_domain] to both 'domain.com' and '.domain.com' but both give me the problems.

Any idea what might be wrong?

Have you checked that the cookie is getting stored with the appropriate domain (and that you don't have excess session cookies left hanging around from your experimentations) ?

Fred

I guessed I should be checking that but I really couldnt figure out HOW to check them! I use restful_authentication so where in the flow should i be raising an exception and what should i be throwing up to debug? Im actually pretty sure there're excess cookies hanging around. Because when I go to domain.com/login, it takes me right in and gives me a routing error cos of the subdomain absence. when i type in the url domain.com/logout, it goes to the login page, fails in :not_logged_in_required and takes me into the app again and throws the same routing error. So there is definitely a session hanging around. How do i clean that up?

I guessed I should be checking that but I really couldnt figure out HOW to check them!

Wasn't thinking of anything more sophisticated than checking in your browser's preferences.

Fred

:smiley: <duh...>

ok i cleared the relevant cookies in Safari and its working now.

But Firefox is throwing me the InvalidAuthenticityToken error when i try to login. any idea why?

:smiley: <duh...>

ok i cleared the relevant cookies in Safari and its working now.

But Firefox is throwing me the InvalidAuthenticityToken error when i try to login. any idea why?

maybe it also had duff cookies? authenticity tokens are based on the session, so if the session is messed up, so would they.

Fred

:slight_smile: I checked that the first time, of course. I know I came off a lil dim last time but come on :smiley:

I dumped all the cookies and authentication data and all other private data twice and restarted FF and checked again to make sure nothings hanging around and then cleared it again and I tried logging in :). IAT error. Any other possible causes?

I'll start googling. Thanks for your help Fred. really appreciate it.

:slight_smile: I checked that the first time, of course. I know I came off a lil dim last time but come on :smiley:

I dumped all the cookies and authentication data and all other private data twice and restarted FF and checked again to make sure nothings hanging around and then cleared it again and I tried logging in :). IAT error. Any other possible causes?

The actual domains used might be relevant - browsers won't let you set the cookie domain to certain things, for example .domain.com is fine, but .com isn't. The number of components you need does vary, for example .co.uk isn't ok, whereas co.com isn't. If firefox was working from a different list then this might happen (particuarly if this is in development with fake local domains)

Fred

Bang on! :slight_smile: Its working in production. Not working in dev. I can live with that :). (i hope...)

Thanks again Fred!

To get sub-domains working in development, I update my hosts file with domains like x.test.com and y.test.com and test.com in my hosts file all pointing to localhost and then do the various tests with the cookie set on .test.com Then you can access the sites on x.test.com:3000 etc

Andrew Timberlake http://ramblingsonrails.com http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain

Actually, on second thought, this could be a pain. I use FF with Firebug to debug my JS. And also once in a while, check for browser compatibility.

You think I can access and edit this 'list' FF might be working off? :slight_smile: kinda like editing /etc/hosts? Or could there be a development domain that FF would recognize?

Alternatively, I could still use a staging environment for doing the Firebug testing and browser compatibility tests.

You thoughts?

Andrew,

Awesome! That did it. Edited /etc/hosts as you suggested, changed Subdomain_fu's tld_size for development to 1 restart server boom!

Great stuff! learnt a lot! thanks a lot.. both of you..

Andrew,

Awesome! That did it. Edited /etc/hosts as you suggested, changed Subdomain_fu's tld_size for development to 1 restart server boom!

I just about always have domains in /etc/hosts to mirror the real ones, ie if the app was deployed at www.example.com & orders.example.com I'd have www.example.local & orders.example.local. I like keeping my development environment close to the production one.

Fred

I just about always have domains in /etc/hosts to mirror the real ones, ie if the app was deployed at www.example.com & orders.example.com I'd have www.example.local & orders.example.local. I like keeping my development environment close to the production one.

Fred

Agreed, I just wish I could use *.example.local in /etc/hosts :slight_smile:

Andrew Timberlake http://ramblingsonrails.com http://www.linkedin.com/in/andrewtimberlake

"I have never let my schooling interfere with my education" - Mark Twain