在 Rails 范围内使用 devise_for 设计生成的邮件程序 URL

2023-12-23

我正在使用 Javascript 框架构建 Rails 应用程序,因此 Rails 正在为后端 API 提供服务。

目前,该应用程序只是实现所有设计视图和操作。

为此,Rails 应用程序仅接受对其的 JSON 调用/api/URL,并要求 Devise 仅使用 JSON 调用,因此我将它们定义如下:

Rails.application.routes.draw do
  scope :api, module: :api, constraints: { format: 'json' } do
    devise_for :users, controllers: {
      confirmations: 'devise/confirmations',
      registrations: 'devise/registrations',
      sessions: 'sessions'
    }

    resources :users
  end

  # For details on the DSL available within this file, see http://guides.rubyonrails.org/routing.html
  root to: 'home#index'
  get '*path', to: 'home#index'
end

解释一下这里发生了什么:

  • 第一部分是定义 API URL(包括设计 URL)并定义 API 资源(目前仅:users)
  • 然后它定义了root route
  • 最后将所有调用转发到 Javascript 路由器(允许管理页面重新加载或外部链接(如电子邮件链接))。

除了帐户确认电子邮件链接之外,一切正常。 发送的确认电子邮件包含一个链接,其中包括/api/ (http://localhost:3001/api/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc http://localhost:3001/api/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc),而它应该没有(预期的 URL:http://localhost:3001/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc http://localhost:3001/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc).

我怎样才能设计发送确认电子邮件(以及所有其他电子邮件)而不需要/api/ part?

Update

深入研究设计源代码我发现确认邮件视图模板 https://github.com/plataformatec/devise/blob/master/app/views/devise/mailer/confirmation_instructions.html.erb#L5正在使用confirmation_urlRails 命名为路线,这是正确的。

就我而言,我需要将所有设计路线限制为/api/路由,对于 JSON 格式,除了少数路由需要定义两次:第一次超出/api/HTML 格式的范围(将转发到我的 JavaScript 应用程序),以及/api/JavaScript 应用程序将调用的范围。

Example:预期账户创建确认执行堆栈

  1. Rails 收到请求/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc
  2. Rails 将请求转发到 Javascript 路由器
  3. Javascript框架加载对应页面
  4. Javascript 页面加载一个服务,该服务将调用/api/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc设计确认帐户的路线

您应该能够简单地在初始 API 路由之后添加两个附加路由。像这样:

Rails.application.routes.draw do
  scope :api, module: :api, constraints: { format: 'json' } do
    devise_for :users, controllers: {
      confirmations: 'devise/confirmations',
      registrations: 'devise/registrations',
      sessions: 'sessions'
    }

    resources :users
  end

  devise_for :users, controllers: {
    confirmations: 'devise/confirmations',
    registrations: 'devise/registrations'
  }

  root to: 'home#index'
  get '*path', to: 'home#index'
end

如果没有看到前端代码,很难确定,但是有两条路线就可以了。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Rails 范围内使用 devise_for 设计生成的邮件程序 URL 的相关文章

  • Rails:通过关联has_many,以及创建新实例的形式

    我对 Rails 还很陌生 只是想通过建立关联来获得我的第一个 has many 食谱有很多成分 每种成分都有食谱所需的量 成分量表具有配方是 成分是 以及量 创建新食谱时 我希望能够在同一位置创建这些食谱 成分关联 最后 我将为配料构建一
  • 如何使用哈希数组填充 select_tag?

    在 Rails 3 2 应用程序中 我尝试添加一个选择字段 该字段从外部 API 调用获取数据 该数据作为哈希数组返回 name gt NameA id gt 001 name gt NameB id gt 002 我如何使用这些数据来构造
  • 为什么这个 rspec 请求规范不更新模型?

    我有一个与用户模型交互的请求规范 我想确保具有管理员角色的用户可以创建 编辑 销毁用户 我现在遇到一个问题 编辑操作无法更新用户 当我手动执行网站本身的操作时 一切正常 但测试无法更新用户 这是我的规格 it edits a user do
  • 如何在Rails中管理没有id的表?

    我有两个模型 人模型和关系模型 第二个存储有关两个人之间关系的信息 它有parent id和child id字段 但没有id字段 我将它与 has many through 连接起来并且它有效 But 即使表中存在某些关系 因为没有 id
  • 通俗地说,Ruby on Rails ORM 是什么?请解释

    我无法理解 Ruby on Rails 中的 ORM 据我了解 表 列和对象 属性之间存在 1 1 的关系 所以每条记录都是一个对象 另外 模型到底是什么 我知道它映射到一张桌子 我真正追求的是对上述内容有更深入的理解 预先感谢您的帮助 我
  • Rails 命令有什么区别:--no-test-framework、--skip-test-unit 和 -T?

    原本我以为这三者都是一样的 但现在仔细一看 却发现它们各有不同 我通过搜索找不到任何关于此的好的文档 根据导轨API http api rubyonrails org classes Rails Generators Base html a
  • 当你不继承Rails 4中的ApplicationController时,如何包含respond_to?

    我在 Rails 4 1 2 应用程序中有一个 API 控制器 它不继承自应用程序控制器 我试图包含 respond to 方法并得到一个方法未定义的错误 所以然后我需要在顶部的操作包 如下所示 require action pack cl
  • 查找具有唯一两列组合的所有行

    我有这张桌子messages sender id recipient id 1 2 1 3 1 3 2 1 3 1 2 3 我希望选择这样的行 Either sender id or receiver id current user id
  • Jquery 条件适用于除 safari 之外的所有浏览器

    在 iPhone 和 iPad 上的 Safari 中 我为条件语句设置的选择器不起作用 并且会导致每个 ajax 请求出现重复的内容 它在 android chrome firefox ie 和桌面版 safari 上运行良好 li mi
  • jQuery 自动完成滚动问题

    我在用着Rails3 jquery 自动完成 https github com crowdint rails3 jquery autocomplete在我的应用程序中 我遇到了以下问题 如果您在输入字段中输入某些内容以便显示自动完成数据并在
  • 在自定义条件下清理 SQL

    我需要创建一个简单的搜索 但我无法使用 Sphinx 这是我写的 keywords input split s queries keywords each do keyword queries lt lt sanitize sql for
  • Rails 创建 schema_migrations - Mysql2::Error: 指定的键太长

    我正在使用Rails 3 2 6和Mysql 6 0 9 但我在MySQL 5 2 25上有完全相同的错误 当我创建新数据库时 rake db create 然后当我尝试加载架构时 rake schema load 我收到此错误 Mysql
  • Ruby On Rails 与 Windows Vista - 最佳设置? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 您认为 Win Vista 环境中 RoR 的最佳设置是什么 我尝试过 radrails eclipse 插件 它对我来说似乎太庞大了 我也开始
  • Capistrano 无法定位应用程序部署中的 Gemfile 错误

    我正在尝试将 Rails 应用程序部署到生产服务器 并决定使用以下命令将其部署到 DigitalOcean本指南 https gorails com deploy ubuntu 14 04 overview RVM 要部署 我使用以下命令
  • 初始化会破坏rails中的布局设置吗?

    在其中一个控制器中 我需要特定的布局 我添加了layout一开始 效果很好 但如果我添加一个initialize某些基于控制器的变量的函数 Rails 似乎只是忽略了layout命令 有人有同样的问题吗 我该如何修复它 class Admi
  • heroku 语言区域设置不工作 I18n::MissingTranslationData

    在我的本地电脑上一切正常 但在 heroku 上我收到错误 我的 Heroku 控制台 PC HOME PC c rails konkurranceportalen master heroku console Ruby console fo
  • Rails 4 与 MailCatcher 和 Devise gems

    我有一个带有 gem Devise 的应用程序 我需要通过电子邮件确认注册 在配置 环境 rb我添加了这个 ActionMailer Base delivery method smtp ActionMailer Base smtp sett
  • 如何显示 RSpec 测试生成的 SQL 查询日志?

    我正在为我的 Rails 3 应用程序编写规范 我想测试数据库事务是否真的有效 如果能够看到我的应用程序在规范驱动下生成的 sql 查询 这将非常有帮助 有没有办法像在 Rails 控制台中一样查看查询 我正在使用 Rails 3 0 9
  • Rails 3:用户创建自定义表单?

    我正在尝试思考如何允许用户创建具有所有字段类型的自定义表单 如果有一颗宝石那就太好了 但我似乎无法在任何地方找到它 所以我有一个像这样的数据库设置 t integer form id t string name t string hint
  • Rails 4 - 如何在开发中使用 sqlite3 以及在生产中使用 PostgreSQL 和 Heroku

    我正在尝试部署到 Heroku 但不能 因为默认的 sqlite3 服务器仍然存在 检测到 Heroku 不支持 sqlite3 gem https devcenter heroku com articles sqlite3 https d

随机推荐