【问题标题】:Custom authentication with MVC使用 MVC 的自定义身份验证
【发布时间】:2016-12-07 06:44:15
【问题描述】:

我想使用 MVC3 创建自定义身份验证。

Scenerio:: 用户将有一个登录表单,他将在其中输入用户 ID 和密码。 然后根据我的业务逻辑验证这些凭据。我不能使用默认进程,比如从用户表中验证它然后分配角色等。

我的业务逻辑将为我提供一个布尔值 IsValidUser 和 UserRole。

问题::我需要做两件事:
1. 在 AuthoriseAttribute 过滤器中使用业务逻辑返回的这些值。这样我就可以限制用户访问控制器的任何特定操作。(我尝试将这些值放在 Session 变量中,但无法在授权过滤器中使用它们。)
2. 如何使用 Formsauthentication.Setauthcookie 来完成这个任务。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-mvc-3 form-authentication


    【解决方案1】:

    对于自定义身份验证,您可以使用“ActionFilters”类来授权特定控制器,并且您可以以属性的形式传递从“业务逻辑”中获得的那些参数,

    动作方法,

    [MyActionFilter(Property1 = "Value1", Property2 = "Value2")]
    public ActionResult Index()
    {
        return View();
    }
    

    动作过滤器就像

    public class MyActionFilter : ActionFilterAttribute
    {
        public string Property1 { get; set; }
        public string Property2 { get; set; }
    
        public override void OnActionExecuting(ActionExecutingContext filterContext)
        {
            base.OnActionExecuting(filterContext);
        }
    }
    

    【讨论】:

    • 所以它是这样的,我必须将这些值保存在会话变量中,然后将它们传递给操作过滤器?这是正确的方法吗?因为我需要发现该用户也在许多其他控制器中经过身份验证。
    • 是的,您必须将 UserID 存储到业务逻辑中的会话中。您可以从 ActionFilter 中的会话中检索它。另一个参数是 RoleID,您可以根据需要将其存储到枚举类或数据库中。
    • 我们无法访问 ActionFilter 中的 Session 变量 :)
    • 我们可以访问 ActionFilters 中的会话数据可能是您做错了什么。如果这个解决方案对你有帮助。您可以将其标记为答案,
    • 您可以从 MyActionFilter 访问您的 Session 变量。为此,请使用以下命令:HttpContext.Current.Session["sessionVariableName"]。这将为您提供所需的 Session 变量。
    猜你喜欢
    • 2016-02-21
    • 2014-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-06
    • 1970-01-01
    • 1970-01-01
    • 2020-04-01
    相关资源
    最近更新 更多