Я пытаюсь по-другому с devise
перегрузить контроллер сеанса devise
class SessionsController < Devise::SessionsController
def new
super
end
def create
resource = warden.authenticate!(:scope => resource_name, :recall => :failure)
return sign_in_and_redirect(resource_name, resource)
end
def sign_in_and_redirect(resource_or_scope, resource)
scope = Devise::Mapping.find_scope!(resource_or_scope)
resource ||= resource_or_scope
sign_in(scope, resource) unless warden.user(scope) == resource
subdomain_name = current_user.account.subdomain_name
if !current_account
redirect_to root_url(:host => "#{subdomain_name}" + "." + "#{request.host}")
else
redirect_to root_url
end
end
end
Мой контроллер приложений:
class ApplicationController < ActionController::Base
include UrlHelper
protect_from_forgery
helper_method :is_root_domain?
before_filter :current_account
def is_root_domain?
# return true if there is no subdomain
puts "++++++++++++++++++++++++++#{request.host_with_port}"
(request.subdomains(0).present? && request.subdomains(0) != "www") ? false : true
# request.subdomains.first.present? && request.subdomains.first != "www"
end
def current_account
# If subdomain is present, returns the account, else nil
if !is_root_domain?
@current_account ||= Account.find_by_subdomain_name(request.subdomains(0))
if @current_account.nil?
flash[:notice] = "There is no Account with this subdomain"
redirect_to root_url(:account => false)
end
else
@current_account = nil
end
@current_account
end
end
А мой макет приложения:
<!DOCTYPE html>
<html>
<head>
<title>Subdomain</title>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
<body>
<div id="container">
<div id="header">
<% if is_root_domain? %>
<h1>Sub<span class="off">Domain</span></h1>
<% else %>
<h1><%= @current_account.name %></h1>
<% end %>
</div>
<!--<div><%#=flash[:notice]%> <%#=flash[:alert]%></div>-->
<div id="menu">
<ul>
<% if user_signed_in? %>
<li class="menuitem"><a>Signed in as : <%= current_user.email %></a></li>
<li class="menuitem"><%= link_to "Sign out", destroy_user_session_path, :method => :delete %></li>
<% end %>
<% if !user_signed_in? %>
<% if is_root_domain? %>
<li class="menuitem"><a href="/">Home</a></li>
<li class="menuitem"><a href="#">About</a></li>
<li class="menuitem"><a href="#">Products</a></li>
<li class="menuitem"><a href="#">Services</a></li>
<li class="menuitem"><a href="#">Design</a></li>
<li class="menuitem"><a href="#">Contact</a></li>
<li class="menuitem"><%= link_to "Sign up", new_user_registration_path %></li>
<li class="menuitem"><%= link_to "Sign in", new_user_session_path %></li>
<% else %>
<li class="menuitem"><%= link_to "Sign in", new_user_session_path %></li>
<% end %>
<% end %>
</ul>
</div>
<% if user_signed_in? %>
<div id="leftmenu">
<div id="leftmenu_top"></div>
<div id="leftmenu_main">
<h3>Links</h3>
<ul>
<li><a href="#">Ruby</a></li>
<li><a href="#">PHP</a></li>
<li><a href="#">Ajax</a></li>
<li><a href="#">jQuery</a></li>
<li><a href="#">Web design</a></li>
<li><a href="#">Web Programming</a></li>
<li><a href="#">RAILS</a></li>
<li><a href="#">Internet Marketing</a></li>
</ul>
</div>
<div id="leftmenu_bottom"></div>
</div>
<% end %>
<div id="content">
<div id="content_top"></div>
<div id="content_main">
<%= yield %>
</div>
<div id="content_bottom"></div>
</div>
</div>
</body>
</html>
теперь, когда я пытаюсь войти в систему от root, это означает, что localhost перенаправляет его на subdomain.localhost, но не может войти в этот домен
, если я удаляю поддомен из subdomain.localhost: 3000 itпоказывает пользователя на своей странице, т.е. пользователь уже выполнил вход
user_signed_in?не работает для субдомена
Если я войду из субдомена, все будут работать правильно.Но когда я пытаюсь войти из корневого домена, я получаю сообщение об ошибке
Кто-нибудь, пожалуйста, помогите мне
Заранее спасибо
Kausik