首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC5 Identity 2.0后端和前端登录

问MVC5 Identity 2.0后端和前端登录
EN

Stack Overflow用户
提问于 2015-10-17 06:10:01
回答 1查看 835关注 0票数 0

我正在开发一个项目,其中我有一个后台区域(管理区域),以配置系统,并为典型的用户做他的业务前台办公室区域。

也就是说,应用程序需要有一个Backoffice Login和另一个Frontoffice Login。每一个都必须分开。

我已经使用Asp Identity 2.0开发了一个Backoffice和Frontoffice登录和注册的不同区域,它们工作得很好。

例如,后台区域可以有一个"myuser“用户名,前台区域可以有一个"myuser”用户名,因为每个用户名都保存在不同的表中。

我已经开发了一个自定义区域授权来管理它。

我的问题是,当用户登录到Backoffice区域时,如果他去前台办公室区域,他仍然报告已经登录……

如何区分每个区域的User.Identity登录?

提前感谢!!

EN

回答 1

Stack Overflow用户

发布于 2015-11-11 08:02:40

采用的解决方案:

1)创建了前台授权属性和BO授权属性来管理FO / BO登录页面:

代码语言:javascript
复制
public class AreaAuthorizeAttribute : AuthorizeAttribute
{
    private readonly string area;

    public AreaAuthorizeAttribute(string area)
    {
        this.area = area;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        RouteValueDictionary values;

        if (!string.IsNullOrEmpty(area))
        {
            values = new RouteValueDictionary(new
            {
                Area = area,
                Controller = "Account",
                Action = "Login"
            });
        }
        else
        {
            values = new RouteValueDictionary(new
            {
                Area = "Frontoffice",
                Controller = "Account",
                Action = "Login"
            });
        }

        filterContext.Result = new RedirectToRouteResult(values);
    }

}

第2部分)

为了管理BO和FO之间的身份,即始终通过User.Identity根据您所在的区域获取正确的身份,在Global.asax中创建了此方法

代码语言:javascript
复制
 protected void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        if (Request.IsAuthenticated)
        {
            var user = (System.Security.Claims.ClaimsPrincipal)User;

            if (user.Identities.Count() > 1)
            {
                if (HttpContext.Current.Request.Url.ToString().Contains("Frontoffice"))
                {
                    HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(user.Identities.First(), new string[] { "Admin" });
                }
                else
                {
                    HttpContext.Current.User = new System.Security.Principal.GenericPrincipal(user.Identities.ElementAt(1), new string[] { "Admin" });
                }
            }
        }
    }

只需将if(Request.IsAuthentifacted)更改为您在管理用户身份和BBBBOOOMMMM时想做的任何事情:)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33180293

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档