ruby-on-rails - Tennat 范围内的电子邮件网址
问题描述
在 Rails 6 应用程序中,我需要将电子邮件中生成的 URL 限定为当前租户(为此我使用的是 Apartment)。
所以,一个正确的 URL 看起来像http://localhost:3000/tenant_name/dashboard
使用Middleware
类似于https://github.com/gorails-screencasts/gorails-episode-234/blob/master/lib/account_middleware.rb的方式将租户添加到 URL
class AccountMiddleware
def initialize(app)
@app = app
end
# http://example.com/12345/projects
def call(env)
_, organization_name, request_path = env["REQUEST_PATH"].split('/', 3)
if true
if organization = Organization.find_by(name: organization_name)
Current.organization = organization
else
return [302, { "Location" => "/" }, []]
end
env["SCRIPT_NAME"] = "/#{organization_name}"
env["PATH_INFO"] = "/#{request_path}"
env["REQUEST_PATH"] = "/#{request_path}"
env["REQUEST_URI"] = "/#{request_path}"
end
@app.call(env)
end
end
与以下
#/config/routes.rb
get 'dashboard', to: 'dashboard#show'
如果我只是使用root_url
我会得到http://localhost:3000/dashboard
哪个不起作用。
在尝试了几种方法后,我想出了
"#{ActionMailer::Base.default_url_options[:protocol]}://#{ActionMailer::Base.default_url_options[:host]}/#{Apartment::Tenant.current}#{dashboard_url(only_path: true)}"
哪个有效,但很丑陋。
关于如何使它变得更好的任何想法?
解决方案
推荐阅读
- android - Firebase - 无法设置通知的标题和消息
- node.js - mongoose:findOneAndUpdate 找到比 _id 更复杂的表达式
- python - 如何迭代嵌套字典中的第 n 个位置
- ios - 弱财产分配混乱
- javascript - 向 HTML 锚点添加多个操作
- android - 为什么我在适用于 Android 的 Xamarin Forms 中收到“AnimationViewRenderer 在上下文中不存在”错误?
- python - 我们如何使用 python 的 Cryptography 库从私钥(受密码保护)中检索公钥?
- amazon-web-services - 如何在 CodeDeploy 中设置和获取环境变量
- wix - MSI 安装程序失败并出现错误:程序集错误:参数不正确
- javascript - 角度js +类型脚本中的动态列表