【问题标题】:Passing additional data in WebSecurity在 WebSecurity 中传递附加数据
【发布时间】:2014-12-31 04:51:24
【问题描述】:

我在 ASP.NET MVC 4 中使用默认表单身份验证实现。

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
    if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
    {
       //Assign additional data
        return RedirectToLocal(returnUrl);
    }

    // If we got this far, something failed, redisplay form
    ModelState.AddModelError("", "The user name or password provided is incorrect.");
    return View(model);
}

这很好用。我需要传递每个登录用户的一些附加数据,以供以后使用,而无需再次访问数据库。 (例如:用户角色和角色详细信息)

在不使用 Session 变量的情况下,WebSecurity 中是否有任何实现?

【问题讨论】:

  • 如果您想为登录的用户使用角色,那么您可以使用 [ValueNetAuthorize] 属性来装饰,而不是在操作中使用 [AllowAnonymous]。您也可以像这样传递角色权限: [ValueNetAuthorize(Permissions = Roles.View)] 您应该具有角色实体中定义的权限。

标签: c# asp.net asp.net-mvc asp.net-mvc-4 security


【解决方案1】:

通常您会在使用代码注册用户时存储其他值

WebSecurity.CreateUserAndAccount("username", "somepassword", new{DateCreated=DateTime.Now});

您可以在匿名对象中添加多个属性

WebSecurity.Login 只需 2 个参数即可登录现有用户

【讨论】:

    【解决方案2】:

    您可以使用此方法来附加值和参数 websecurity 方法:

    WebSecurity.CreateUserAndAccount(model.UserName, model.Password,
                            propertyValues: new
                            {
                                NameFamily = model.NameFamily,
                                PostCode = model.PostCode,
                                Address = model.Address,
                                Phone = model.Phone,
                                Lat = model.Lat,
                                Lng = model.Lng
                            });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-04-11
      • 2018-11-17
      • 1970-01-01
      • 1970-01-01
      • 2015-07-19
      • 2013-03-01
      • 2018-03-06
      • 1970-01-01
      相关资源
      最近更新 更多