【发布时间】:2018-10-18 00:12:57
【问题描述】:
我正在使用 Javascript 框架构建 Rails 应用程序,因此 Rails 提供后端 API。
目前,该应用只是实现所有设计视图和操作。
为此,Rails 应用程序仅接受对其/api/ URL 的 JSON 调用,并要求 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路由 - 最后将所有调用转发到 Javascript 路由器(允许管理页面重新加载或电子邮件链接等外部链接)。
除帐户确认电子邮件链接外,一切正常。
发送的确认电子邮件包含一个包含/api/ (http://localhost:3001/api/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc) 的链接,但它应该没有(预期 URL:http://localhost:3001/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc)。
我怎样才能设计发送没有/api/ 部分的确认电子邮件(和所有其他电子邮件)?
更新
深入查看设计源代码,我发现the confirmation mailer view template 使用的是confirmation_url Rails 命名路由,这是正确的。
在我的情况下,我需要将所有设计路由限制为 /api/ 路由和 JSON 格式,除了少数要定义 2 次的路由:第一次超出 HTML 中的 /api/ 范围格式(将被转发到我的 JavaScript 应用程序),以及 /api/ 范围内的第二条路由,该路由将由 JavaScript 应用程序调用。
示例:预期的帐户创建确认执行堆栈
- Rails 接收到
/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc的请求 - Rails 将请求转发到 Javascript 路由器
- Javascript框架加载相应页面
- Javascript 页面加载一个服务,该服务将调用
/api/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_ncDevise 路由来确认帐户
【问题讨论】:
标签: ruby-on-rails devise