【发布时间】:2014-08-31 08:27:00
【问题描述】:
今天我遇到了一个相当奇怪的现象。在开发每个用户都有自己的子域的 Rails 应用程序并尝试使用 Devise 来实现时,我遇到了未注册的子域也会路由到根页面。因此,例如,即使没有(显式)子域,它也会将我路由到主应用程序页面。也许这与我的特定设置有关?我也尝试了一个新的 Rails 项目,但得到了相同的结果。任何人都可以为我澄清这一点? Railscast 没有做到这一点。
另外,我现在正在使用 WEBrick,尽管这不是我将在生产中使用的,并且我正在使用域 lvh.me 来访问子域。
感谢您的帮助。
编辑:这是我的 routes.rb 文件:
Rails.application.routes.draw do
devise_for :users
root 'static_page#index'
end
我遵循了 Devise wiki 中的指南: https://github.com/plataformatec/devise/wiki/How-to:-Scope-login-to-subdomain
所以我所做的是通过迁移删除了电子邮件的唯一性,然后我将 :subdomain 添加到 request_keys 中,如下所示:
devise :database_authenticatable, :recoverable, :rememberable, :trackable, :timeoutable, request_keys: [:subdomain]
然后我继续重写“find_for_authentication”函数,如下所示:
def self.find_for_authentication(conditions={})
conditions[:account_id] = Account.find_by_subdomain(conditions.delete(:subdomain)).id
super(conditions)
end
这就是总结。
编辑: 我一直在搞砸,我发现了问题。 “根”指令将所有子域都指向我的域。因此,如果我从 routes.rb 中删除根目录,每个 子域都会导致 RouteError。我记得在我的应用程序的某个地方需要一个 root 用于 Devise。所以我不确定这是 Devise 的行为还是 root 的行为。
【问题讨论】:
-
“Railscasts 没有成功”是什么意思?还能为你拼出多少?
-
对不起,Railscasts 没有明确说明每个子域都被路由到主页的场景,即使没有路由可以做到这一点!
-
如果您需要帮助修复您的代码,您需要向我们展示您正在使用的代码,然后解释问题。
-
嗨@Alex,我不熟悉那个 rasilcast 插曲......你能复制你添加的任何其他代码来让那个域的东西工作吗? (注意:一些 railscast 已经很老了,可能依赖于旧版本的 rails - 另外,如果您在此处包含所有代码,我们可能会发现一些明显遗漏的内容)
-
基本上,我是按照教程进行的,然后我去看了一些 Railscast,看看有没有我可能错过的东西。
标签: ruby-on-rails ruby-on-rails-4 devise subdomain