我正在开发一个使用
app
子域的 Rails 应用程序。例如,如果用户通过 www.mysite.com
访问我的应用程序并登录,他们应该被重定向到 app.mysite.com/
(这应该是articles#index 页面,因为它是经过身份验证的根)。由于某种原因,当我尝试登录时,它让我登录正常,但将我重定向到我的主根路由,而不是经过身份验证的根路由。这是我的 routes.rb
文件:
Rails.application.routes.draw do
devise_for :users, path: '', path_names: {
sign_up: 'signup',
sign_in: 'login',
sign_out: 'logout'
}
authenticated :user do
constraints subdomain: 'app' do
get '/topics', to: 'topics#index'
get '/articles', to: 'articles#index'
root to: 'articles#index', as: :authenticated_root
end
end
root 'home#index'
end
我是否需要调整设备设置以使其能够识别
app
子域?如果是的话,怎么办?
任何和所有的帮助将不胜感激。
谢谢!
默认情况下 Devise 仅重定向到根路径:
def after_sign_in_path_for(resource_or_scope)
stored_location_for(resource_or_scope) || signed_in_root_path(resource_or_scope)
end
由于这是相对路径,因此它将始终重定向回请求来自的同一子域。
您需要在登录后更改重定向:
def after_sign_in_path_for(resource)
stored_location_for(resource) || root_url(subdomain: 'app')
end
此方法可以在您的 ApplicationController 中重写(因为 Devise 继承自它)或通过子类化 Devise::RegistrationsController。