使用 SimpleMembership 登录到多个应用程序

本文关键字:应用程序 SimpleMembership 登录 使用 | 更新日期: 2023-09-27 18:33:24

我已经阅读了这个线程简单会员 - 有人让它对 n 层友好吗?但它直接谈到了使简单会员 N 层友好。 即使认为这是我提问的下一个可能进展,我还没有绕过我目前的障碍。

我有多个MVC 4应用程序,它们都使用相同的数据库表进行登录,我想维护应用程序之间的登录连接。 我已经修改了 SimpleMember(控制器、视图和 css(和关联的数据库表(我添加了几个表,这些表定义了这些应用程序中允许的应用程序和角色(,剩下要做的就是让单个登录应用于所有应用程序。 这是任何人做过或知道该怎么做的事情吗? 最终,我想将这些应用程序的登录部分移到它自己的项目中,因为每次编辑某些内容时,都必须在每个应用程序中更改csshtml和控制器。

如果有人有任何其他可能效果更好的建议,我全听!

使用 SimpleMembership 登录到多个应用程序

我似乎记得所需要的只是在每个应用程序的web.config的<system.web>部分中为每个应用程序使用相同的machineKey配置:

<machineKey validationKey="valkey" decryptionKey="deckey" decryption="3DES" validation="SHA1" />

我不完全确定对此的最佳实践是什么,但这里有一个想法浮现在脑海中。

一个主要限制是能够为这些用户共享应用程序池和会话。

一种方法(同样,我不确定最佳实践是什么(是从一个地方设置所有这些应用程序。入门级(如果您愿意(。这将只有一个用于启动应用程序的 global.asax 定义。每个应用程序将从一个位置开始,允许它们共享相同的范围。这可以通过全局 .asax 文件中的几个步骤来完成。

右键单击 global.asax,然后单击显示标记

<%@ Application Codebehind="Global.asax.cs" Inherits="appNamespace.ApplicationModerator" Language="C#" %>

在global.asax内部.cs

public class ApplicationModerator : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        new namespace1.TierApplication1();
        new namespace2.TierApplication2();
        new namespace3.TierApplication3();
    }
}

TierApplication1(它们都将不同,但具有相似的功能(

public class TierApplication1 
{
    public TierApplication1 ()
    {
        AreaRegistration.RegisterAllAreas();
        Database.SetInitializer<DbContext>(null);
        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new HandleErrorAttribute());
    }
    public static void RegisterRoutes(RouteCollection routes)
    {
        routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
        routes.IgnoreRoute("favicon.ico");
        routes.MapRoute(
            "Default", // Route name
            "{controller}/{action}/{id}", // URL with parameters
            new { controller = "Account", action = "LogOn", id = UrlParameter.Optional }, // Parameter defaults
        );
    }
}