DynamicRouteValueTransformer中的用户身份

时间:2019-09-19 04:33:31

标签: authentication asp.net-core authorization

我需要类似于CMS的动态路由(控制器/操作),可以说如果用户请求http://blahblah.com/book1/chapter1/lesson34,则在运行时确定控制器或操作。要确定控制器,我需要对用户进行身份验证并获得正确的索赔。

我使用asp.net 3.0端点路由的新功能,创建了一个继承了DynamicRouteValueTransformer的TestControllerTransformer。但是在TestControllerTransformer中,我无法获取用户身份,随后在控制器上,用户身份可用。这是设计使然吗?

public class TestControllerTransformer : DynamicRouteValueTransformer
    {
        private ILogger<TestControllerTransformer> _logger;

        public TestControllerTransformer(ILogger<TestControllerTransformer> logger)
        {
            _logger = logger;
        }

        public override ValueTask<RouteValueDictionary> TransformAsync(HttpContext httpContext, RouteValueDictionary values)
        {
            var controller = "Home";
            var action = "Index";

            if (values == null)
                values = new RouteValueDictionary();


            values["controller"] = controller;
            values["action"] = action;


            if (httpContext.User.Identity.IsAuthenticated)
            {
                _logger.LogTrace("User Authenicated"); //Never reaches to this line
            }
            else
            {
                _logger.LogTrace("User NOT Authenicated");
            }


            return new ValueTask<RouteValueDictionary>(values);
        }
    }

我期望用户登录后在TestControllerTransformer中httpContext.User.Identity.IsAuthenticated为true,因此我可以在业务逻辑中使用User-Identity-Claims来在运行时确定控制器/操作。

0 个答案:

没有答案