我的rails 3应用程序需要一个before_filter来检查用户是否已登录。如果已记录,则重定向到子域。我使用Devise作为日志系统。在sign_up之后,用户将重定向到他的子域,但如果他回到网站并再次登录,则必须再次将其重定向到他的子域。
我试过了:
if current_user.present?
company_id = current_user.company_id
@company = Company.find(company_id)
redirect_to @company.subdomain + "." + request.domain
end
使用此代码,网址为:www.mywebsite.comsubdomain.mywebsite.com 是的,我认为这是因为redirect_to适用于网页而非新网址。
我试过
if current_user.present?
company_id = current_user.company_id
@company = Company.find(company_id)
root_url(:host => @company.subdomain + "." + request.domain)
end
但同样的事情。我得到了与以前的测试相同的网址。
我该怎么做才能重定向到我的子域?
答案 0 :(得分:2)
另一个stackoverflow问题的答案也应该是你的答案:https://stackoverflow.com/a/327154/346693
答案提供了什么:
class ApplicationController < ActionController::Base
before_filter :check_uri
def check_uri
redirect_to request.protocol + "www." + request.host_with_port + request.request_uri if !/^www/.match(request.host)
end
end
你问题的方法是你没有提供完整的网址(http://sth.com vs sth.com)
答案 1 :(得分:0)
请考虑以下示例:another question。
您可以将此作为起点。基本上你会把调用包装成authenticate_user!在你自己的处理程序之前,如果authenticate_user!引发一个例外,你可以进行重定向。
如果它没有引发异常,你可以在其他地方重定向。