Rails 4 应用程序中的子域

2023-12-14

今天我遇到了一个很奇怪的现象。当开发一个每个用户都有自己的子域的 Rails 应用程序并尝试使用 Devise 来完成此操作时,我遇到了未注册的子域也会路由到根页面的情况。因此,例如,即使没有(显式)子域,它也会将我路由到主应用程序页面。也许这与我的特殊设置有关?我还尝试了一个新的 Rails 项目,但得到了相同的结果。有人能为我澄清这一点吗? Railscasts 并没有达到目的。

另外,现在我正在使用 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

这就是总结。

编辑: 我折腾了一番,发现了问题所在。 “root”指令将所有子域引用到我的域。所以如果我从我的routes.rb中删除根目录,every子域会导致 RouteError。我记得在我的应用程序中的某处需要 root 才能使用 Devise。所以我不确定这是 Devise 的行为还是 root 的行为。


您可能会遇到几个问题

首先,您需要了解 Devise 在登录后重定向用户的方式,其次,子域在 Rails 中是如何路由的。

--

Devise

默认情况下,设计前往的路线current_user_path(这通常意味着users#show)或您的路线中的某些内容:

def after_sign_in_path_for(resource)
  current_user_path
end

这意味着当您接受用户的登录时,他们将被带到他们自己的路径。根据您的路线,这通常意味着主站点(无子域)用户的路径(domain.com/users/56) 或者其他的东西。

由于您的问题没有提供任何具体信息,我只能对此进行推测。

--

子域

刚刚开发了一些支持子域的应用程序,您应该考虑有关路由到子域的一些事情。

用户登录后,他们需要能够被路由到特定的subdomain。执行此操作的方法是使用constraint在你的路线中:

#config/routes.rb
constraints { subdomain: 'admin' } do
    resources :photos
end

我们发现您无法使用正常的路由路径来执行此操作 - 您必须使用url (not path帮手)。例如:

photos_path(subdomain: current_user.name) #-> does not work (path is relative)
photos_url(subdomain: current_user.name) #-> will route to http://name.lvh.me:3000

您必须记住的是,如果您希望将流量重定向/路由到不同的子域,则需要引用url帮助者的形式,而不是path参考。

所以如果你采取after_sign_in_path_for如上所示,您需要执行以下操作:

def after_sign_in_path_for(resource)
   root_url(subdomain: resource.name)
end

--

Sessions

最后,您希望确保您的 Devise 会话 cookie 在设置后仍保持初始化状态。我们发现默认情况下不处理子域,因此您必须确保满足它们的要求:

在 Rails 中的子域之间共享会话(cookie)?

#config/initializers/session_store.rb
YOUR_APP_NAME::Application.config.session_store :cookie_store, key: '_app_name_session', domain: :all, tld_length: 2 
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Rails 4 应用程序中的子域 的相关文章

  • 强制执行 has_many 但当前只有一个关联的“rails 方式”是什么?

    我有一个简单的 Rails 应用程序 其中包含模型项目和阶段 一个项目有许多阶段 但一次只能有一个阶段处于活动状态 即 当前 我仍然希望其他阶段可以访问 但当前阶段应该是应用程序的主要锚点 关于如何实现此要求的决定对我如何处理模型访问 验证
  • 使用 PayPal REST API,如何取消付款?

    使用 PayPal REST API 在客户点击 取消订单并返回网站 链接后 我似乎无法弄清楚如何取消付款 也许在生产模式下 PayPal 会自动取消这些付款 但在沙盒模式下它们似乎仍处于 已创建 状态 这一观察结果使我相信 我需要在返回网
  • ActiveRecord::Fixture::FixtureError:表“books”没有名为“loves”的列

    奇怪的 Rails 问题 我有一个Book实体和用户可以Love a book 我的所有其他模型都很好并且通过了所有测试 但是在生成新模型之后Love模型和设置装置时 我突然遇到大量这些错误 ActiveRecord Fixture Fix
  • 寻找在 Ruby on Rails 中构建安全 REST API 的建议

    我正开始为我正在从事的项目构建 REST API 这促使我对使用 RoR 构建 API 的最佳方法进行了一些研究 我很快发现 默认情况下 模型是向世界开放的 只需在 URL 末尾添加 xml 并传递适当的参数即可通过 URL 进行调用 那么
  • 如何从 Rails 中的枚举值获取键名?

    我的模型中有一个与数据库中的列相对应的枚举 枚举看起来像 enum efficency High 0 Medium 1 Low 2 如何从值中获取密钥 例如 我的值为 0 我需要获取值 High 任何帮助 将不胜感激 Model effic
  • 我可以在同一台 Apache 服务器上运行 Python Django 和 Ruby 吗?

    我正在使用 ModWSGI 在 Apache2 上运行 Python Django 并且我想在同一台服务器上运行 Ruby on Rails 可以这样做吗 我读到 Passenger for Ruby on Rails 也可以支持 Djan
  • 设计忽略我的自定义策略

    我想创建一个用于访问 API 的自定义身份验证策略 我按照示例代码进行操作设计忽略自定义策略 https stackoverflow com questions 3503827 devise ignoring custom strategy
  • 在 Rails 中实现友谊模型的最佳方式

    我想在我的应用程序中实现用户的朋友系统 所以我发现 Rails 空间解决方案非常好 其想法是创建两行 in the Friendships table 第一行为发送者邀请 第二行为接收者 用户之间的关系设置为has many像这样的协会 h
  • ExecJS::Runtime在 Rails 4.1.4 中不可用

    UPDATE 现在一切正常了 谢谢deep https stackoverflow com users 2300000 deep 我安装了 node js 然后得到了一个 TZInfo DataSourceNotFound 错误 通过添加解
  • Rails:ENV.fetch() 和 ENV[] 之间的区别

    这两种语法有什么区别 ENV fetch MY VAR ENV MY VAR 我见过 Rails 5 在不同的地方使用了这两个版本 但无法弄清楚其中的区别 除了第一个需要输入更多字符之外 The ENVhash like 对象是普通的 Ru
  • Ruby on Rails(三)隐藏部分视图

    我正在开发 Ruby on Rails 3 Web 应用程序 我有一个名为User有一列名为role 我正在寻找对视图的这些部分具有 错误 角色的用户隐藏视图部分的最佳方法 例如我希望所有用户都能够看到用户index页面 但我只想要具有角色
  • Rails 轮胎 Elasticsearch 奇怪的错误

    我已经索引了Car拥有一辆车记录的车型mercedes benz在数据库中 如果我搜索这个词benz我收到错误 ActiveRecord RecordNotFound in CarsController index Couldn t fin
  • Rails:控制文件存储缓存大小

    Rails 中基于文件的缓存的文档说 请注意 缓存将不断增长 直到磁盘已满 除非您 定期清除旧条目 不幸的是 它没有提供任何有关如何定期清除旧条目的信息 是否设置合适的值 expires in完成这项工作还是清除缓存背后还有其他某种黑魔法
  • 如何在 Ruby 中访问私有类方法?

    给定一个 Ruby 类 class MyClass def self my class method puts class method end private def my method puts regular method end p
  • Rails:与自身的多对多关系

    我在创建此关联时遇到问题 考虑模型 Entry 我希望条目有许多作为父母的条目 并且我希望条目有许多作为孩子的条目 我想通过一个我称为 关联 的模型来实现这种关系 所以这是我尝试的 移民 class CreateAssociations l
  • nginx 504 网关超时

    我正在 nginx 上使用 phusion passenger 运行 Rails3 0 7 项目 当我正在做 ajax 时 大约需要 15 分钟来处理 调用 ajax 10 分钟后 它会跳出一个 Firebug 错误 显示 504 Gate
  • 设计:手动加密密码并直接存储

    我正在尝试从旧数据库迁移大量用户 为此 我使用 activerecord import 并尝试将所有用户数据直接保存到数据库 绕过用户模型 我的问题 我需要获取旧用户的纯文本密码 对其进行加密 然后直接存储到数据库中 我知道怎么做gener
  • Rails 6 升级中未初始化的常量 ActiveRecord::ConnectionAdapters::ConnectionManagement (NameError)

    我目前正在将 Rails 项目从 v5 2 3 升级到 v6 0 我正在关注这个guide https guides rubyonrails org upgrading ruby on rails html升级铁轨 但我只停留在第一步 一旦
  • PostgreSQL 字符串(255)限制 - Rails、Ruby 和 Heroku

    所以我有一个comments表的结构如下 Schema Information Table name comments id integer not null primary key body string 255 notified boo
  • Rails 2 Mailer View 将 3D 添加到字符串之前

    我有一个非常旧的 Rails 应用程序 它试图为新用户发送验证电子邮件 但永远找不到令牌 因为由于某种原因 无论我如何生成链接 链接都会以 3D 形式添加到字符串前面 由于某种原因 它似乎还在标记的中间注入了一个 符号 这是一些带有输出的代

随机推荐

  • 搜索 HTML 表 [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心以获得指导 我已经用 HTML 创建了
  • 之前触发 onchange 时未触发 onclick 事件

    我这里有一个有趣的问题 我有一个文本区域 其中链接了一个 onchange 事件 然后我有一个链接到 onclick 事件的按钮 当在文本区域上触发 onchange 事件时 将处理放入文本区域的文本 当我单击文本区域之外的内容时 通常会发
  • 使用 pyodbc 和 mysql8 的参数化查询对于 int 数据类型的列返回 0

    蟒蛇 2 7 12 pyodbc 4 0 24 操作系统 Ubuntu 16 4 数据库 MySQL 8 驱动程序 MySQL 8 预期行为 结果集应在数据类型为 int 的列中包含数字 实际行为 所有 int 数据类型的列都有 0 如果使
  • 带有 ListBox 的 WPF ListBox - UI 虚拟化和滚动

    我的原型显示包含 页面 的 文档 由缩略图表示 每个文档可以有 任意数量的页面 例如 可能有 1000 个文档 每个文档 5 页 或 5 个文档 每个文档 1000 页 每个 或介于两者之间 文档不包含其他文档 在我的 xaml 标记中我有
  • 当我的整个应用程序锁定在纵向模式时,以横向模式全屏播放视频

    我想以全屏横向模式播放视频 我的应用程序锁定在纵向模式 如何实现这一点 请帮我 提前致谢 swift 3 中最简单的解决方案 将其添加到您的应用程序委托中 func application application UIApplication
  • 在 Firebase 中获取子项计数

    请问我如何简单地从 firebase 查询中获取子项计数 例如 假设我使用包含 10 个子项的数据库查询 我如何获取该值 因为我尝试使用onChildChanged 事件并从中获取价值snapshot 但效果并不好 这是因为首先它会获取数字
  • 无法连接到服务器 - 与网络相关或特定于实例的错误

    尝试连接到 SQL Server 时出现以下错误 建立与 SQL Server 的连接时发生与网络相关或特定于实例的错误 服务器未找到或无法访问 验证实例名称是否正确以及 SQL Server 是否配置为允许远程连接 提供程序 命名管道提供
  • 将派生类指针数组转换为基类指针数组

    考虑这样的继承层次结构 A B1 B2 C D 在C 中实现如下 class A public A virtual A 0 double a A A class B1 virtual public A public B1 virtual B
  • 如何计算 numpy 数组沿轴的平均值? [复制]

    这个问题在这里已经有答案了 我是Python新手 这是我的三维数组 my data numpy zeros index1 index2 index3 为了便于说明 假设尺寸为 index1 5 index2 4 index3 100 我想计
  • 使用 SNI 选项以编程方式在 IIS 8 上添加绑定

    我正在尝试使用 Microsoft Web Administration 库 NET Framework 创建 IIS 8 的绑定 该绑定已检查标志 SNI 服务器名称指示 这对我来说是必要的 因为我想在 IIS 下为同一个网站获取多个 S
  • Swing、Java 和多线程以及着色按钮

    是的 这是家庭作业 是的 我完全被困住了 这是要点 我创建了一个 JFrame 有 3 个面板 顶部 中间 底部 底部面板中有 3 个按钮 红色 绿色和蓝色 顶部面板中有 3 个文本字段 用于显示单击相应按钮的次数 每个按钮最多允许 10
  • 使用平衡组的正则表达式

    我有一个基本的文本模板引擎 它使用如下语法 foo bar IF MY VAR some text IF OTHER VAR some other text ENDIF ENDIF bar foo 我对用于解析它的正则表达式有一个问题 它没
  • Javascript:比较运算符中操作数的顺序[重复]

    这个问题在这里已经有答案了 我看到很多人写作有什么具体原因吗 if 1 a 代替 if a 1 我已经给出了一个答案 其中我写了类似的内容Array obj constructor当有人问我他经常看到人们这样写而不是这样写obj const
  • 使用 etree 从文件中解析 xml 在读取字符串时有效,但在读取文件时则无效

    我对 Python 和 SO 来说是一个相对新手 我有一个 xml 文件 需要从中提取信息 我已经为此苦苦挣扎了好几天 但我想我终于找到了可以正确提取信息的东西 现在我在获得正确的输出时遇到了麻烦 这是我的代码 from xml impor
  • Firebase 函数先解析请求正文,然后才能在 Express 中处理它

    我正在尝试处理 Firebase 函数中的无效请求 因此使用无效的 JSON 发出发布请求 目的是在 Express 中处理它 但我得到400 错误 语法错误 JSON 中位置 20 处出现意外标记 a 在它到达 Express 层之前 最
  • WCF SOAP - 从子节点中删除命名空间

    我正在构建一个服务 并且有一个客户端需要我尝试在我的肥皂服务中接收的特定格式的 xml 我遇到的问题是 当我需要仅在根节点上时 命名空间前缀应用于子节点 下面是在soapui中为请求生成的soap信封
  • 这些 Git 合并标记的简单解释是什么?

    下面参考代码段1 2 3解释Git合并标记的含义 Code from beginning of file lt lt lt lt lt lt lt HEAD code segment 1 merged common ancestors co
  • 为什么linux内核中的udelay和ndelay不准确?

    我做了一个这样的函数 trace printk 111111 udelay 4000 trace printk 222222 日志显示它是 4 01 毫秒 没问题 但当我这样打电话时 trace printk 111111 ndelay 1
  • 如何在 CORS 预检选项请求中发送自定义标头?

    我正在尝试发送 JSON 负载的 CORS 请求 我控制服务器和客户端 我在这里跟随 服务器有一个自定义标头 必须与每个请求一起发送 因此 此自定义标头使请求 不简单 因此必须使用 OPTIONS 请求对请求进行预检 我可以看到 jQuer
  • Rails 4 应用程序中的子域

    今天我遇到了一个很奇怪的现象 当开发一个每个用户都有自己的子域的 Rails 应用程序并尝试使用 Devise 来完成此操作时 我遇到了未注册的子域也会路由到根页面的情况 因此 例如 即使没有 显式 子域 它也会将我路由到主应用程序页面 也