如何使用带有子域的 Devise 进行路由?

问题描述 投票:0回答:1

我正在开发一个使用

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
子域?如果是的话,怎么办?

任何和所有的帮助将不胜感激。

谢谢!

ruby-on-rails devise
1个回答
0
投票

默认情况下 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

© www.soinside.com 2019 - 2024. All rights reserved.