微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

一个人如何在abp框架中使用自定义域名

如何解决一个人如何在abp框架中使用自定义域名

我确定这并不是什么新鲜事物,但是也许我不知道要输入google的正确方法...本质上,我的目标是使用abp.io创建具有以下要求的多租户应用程序。

  1. 新用户注册为租户。
  2. 然后,用户将其域名dns记录指向我的应用程序。
  3. 用户输入要用于其租户的自定义域。
  4. 用户登录名和页面将在其所选域上解析。

例如,我的应用程序名称托管在winemaker.com上。酿酒的人想要使用我的应用程序并使用JoesFootWine的租户名称(winemaker.com/JoesFootWine)进行注册...但是Joe已经拥有域名JoesFootWine.com,并希望将其用于此应用程序。我需要为Joe设置一种轻松设置其租户的方法,以便在JoesFootWine.com上解决winemaker.com/JoesFootWine。

这将是一个额外的好处,但不是硬性要求,即要在JoesFootWine.com/{login-route}上设置登录页面,并且租户已经设置且不可更改。

解决方法

这里最棘手的事情是根据域来解决租户。我之前使用ABP做到了这一点,但无法记住所有详细信息,但是您可以使用ITenantResolveContributor接口创建自己的自定义租户解析器。然后可以使用您的解析器,而不使用默认解析器。

此处的文档位于https://docs.abp.io/en/abp/latest/Multi-Tenancy

在自定义租户解析器中,您需要获取当前正在使用的域,然后使用该域在数据库中查找租户。如果您想允许租户拥有多个域名等,则可以将它们存储在单独的表中,或者它可能只是租户表中的一列。与MVC形式或其他形式相比,从内存中从Aspnet核心中的api调用获取域有点棘手。

如果是api调用,则需要解决租户问题,那么我认为您应该能够从引荐来源网址获取域名

实际上我只是挖了这个。我认为最有可能实现此目的的更好方法,但希望它可以帮助您入门。

        //first try the referrer to see if we can resolve the tenant
        //this will be the referrer from the client calling the api
        var referer = httpContext.Request.Headers.Any(x => x.Key.Equals("referer",StringComparison.InvariantCultureIgnoreCase)) ? httpContext.Request.Headers["Referer"].ToString() : "";
        if (!string.IsNullOrEmpty(referer))
        {
            Uri myUri = new Uri(referer);
            referer = myUri.Host;
        }

        //if no referrer then resort to the host
        //currently this will not change based on tenant
        //but could be an option with some more customization instead 
        //of relying on referrer. 
        if (string.IsNullOrEmpty(referer))
            referer = httpContext.Request.Host.Host;

我还记得在Angular路由之类的UI方面我不需要做任何额外的事情。现在真的不记得一年多以前了。

,

我认为可以实现这一点,因为您的业务模型似乎严重依赖于SignInManager修改和url重写。

新用户注册为租户。

为此,您需要在CustomSignInManager上注册新用户时创建一个租户。您可以查看this article关于如何对其进行自定义。关键是租户名称必须唯一。因此,如果周围有两个 JoesFootWine ,则需要处理该业务案例。

然后用户将其域名dns记录指向我的应用程序

似乎是最后一步,但是确定。

用户输入自定义域以用于其租户。

您可以将此数据保留在其他实体中或扩展TenantEntity。

用户登录名和页面将在其所选域上解析。

我不确定在租户的域中如何或是否可以解决登录问题或任何其他页面的问题。

这将是一个额外的好处,但不是硬性要求登录 页面将在JoesFootWine.com/{login-route}和租户上设置 已设置且不可更改

我想不出一种简单的方法来实现这一目标。如果我理解正确,那么您想在第4步中使每个租户的登录页面居中。这意味着,您需要检查他们正在访问哪个域,并为该租户创建一个特定的登录页面,并且已在Select Tenant输入框中输入了隐藏的租户名称。或同一登录页面上的开关盒输入框。我不确定是否可以实现。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?