Я создаю приложение Rails с каркасом Javascript, поэтому 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
Комуобъясните, что здесь происходит:
- Первая часть определяет URL-адреса API, в том числе разработанные, и определяет ресурсы API (на данный момент только
:users
) - Затем определяется
root
route - Наконец, переадресует любые вызовы на маршрутизатор Javascript (позволяющий управлять перезагрузкой страницы или внешними ссылками, такими как ссылки электронной почты).
Все работает нормально, за исключениемссылка для подтверждения учетной записи электронной почты.В отправленном электронном письме с подтверждением есть ссылка, включающая /api/
(http://localhost:3001/api/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc), в то время как она должна быть без (Ожидаемый URL: http://localhost:3001/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc).
Как я могу создать устройство для отправки электронного письма с подтверждением (и всехсообщения электронной почты) без /api/
части?
Обновление
Глядя глубже в исходный код устройства, я обнаружил, что шаблон представления письма подтверждения используетconfirmation_url
Rails с именем route, что является правильным.
В моем случае мне нужно, чтобы ВСЕ разработанные маршруты были ограничены маршрутом /api/
и форматом JSON, за исключением нескольких маршрутов, равных 2определено время: первый раз из области действия /api/
в формате HTML (который будет перенаправлен в мое приложение JavaScript) и второй маршрут в области действия /api/
, который будет вызываться приложением JavaScript.
Пример: Ожидаемый стек выполнения подтверждения создания учетной записи
- Rails получает запрос на
/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc
- Rails пересылает запрос на маршрутизатор Javascript
- Javascript framework загружает соответствующую страницу
- Страница Javascript загружает службу, которая вызовет маршрут
/api/users/confirmation?confirmation_token=XLDVqqMZwXg6dszyV_nc
Devise для подтверждения учетной записи