【问题标题】:SimpleMembership updating the "isconfirmed" flagSimpleMembership 更新“isconfirmed”标志
【发布时间】:2012-10-10 21:33:57
【问题描述】:

我的用户表(我创建的那个)具有以下列:

UserId,UserName,FirstName,LastName,DOB

在我运行这个命令之后

WebSecurity.InitializeDatabaseConnection("DefaultConnection", "Users", "UserId", "UserName", autoCreateTables: true);

它为我创建了所需的简单成员表。

如何使用新的 SimpleMembership API 在 pages_Membership 中“取消确认”用户或将“IsConfirmed”标志设置为 false?

(之前,在使用“Membership”类进入 simplemembership 之前,我可以使用 api 调用更新用户:Membership.UpdateUser(user);)

【问题讨论】:

    标签: asp.net-mvc-4 security simplemembership


    【解决方案1】:

    我无法直接回答您的问题,因为我也找不到“取消确认”帐户的方法。然而,我最终做的事情可能会对找到这个问题的人有所帮助。

    我基本上使用Roles 作为看门人。每当我创建一个新帐户时,我都会将该用户添加到“用户”角色:

    Roles.AddUserToRole(newUser.Username, "User");
    

    我使用 Authorize 属性来限制对我的控制器的访问(并将 [AllowAnonymous] 用于我想要公开的操作——例如 RegisterUser)。然后,在每个操作中,我添加了一个方法来限制只有“用户”角色的用户才能访问。

    if (!Roles.IsUserInRole(role))
    {
        throw new HttpResponseException(
            new HttpResponseMessage(HttpStatusCode.Unauthorized));
    }
    

    注意:我使用的是 Web API,但如果您使用的是 MVC,您应该会更轻松。您可以使用授权属性,而不是手动检查用户是否在每个操作中担任角色:

    [Authorize(Roles = "User")]
    

    当我想“取消确认”用户时,我只需将其从“用户”角色中删除即可。

    Roles.RemoveUserFromRole(user.Username, "User");
    

    这样,如果用户回来爬网,我可以通过将他们添加回用户来重新激活他们的帐户。

    【讨论】:

      【解决方案2】:

      我最终做的是通过 SQL 查询直接更新该表。不确定这是否是推荐的方法,但这似乎对我有用。 (也感谢您的建议)。

      【讨论】:

        【解决方案3】:

        看看这个blog post on adding email confirmation to SimpleMembership registration process,它介绍了确认过程的工作原理。悬崖笔记是,当你创建一个新用户时,你设置了你想要使用确认的标志。

        string confirmationToken = 
           WebSecurity.CreateUserAndAccount(model.UserName, model.Password, new { Email = model.Email }, true);
        

        当您执行此操作时,CreateUserAndAccount 方法会返回一个唯一令牌,您可以将其放入带有链接的电子邮件中,以便用户可以确认他们为您提供了有效的电子邮件地址。当他们点击链接时,它会在 URL 中传递令牌,然后控制器操作可以像这样确认令牌。

        [AllowAnonymous]
        public ActionResult RegisterConfirmation(string Id)
        {
            if (WebSecurity.ConfirmAccount(Id))
            {
                return RedirectToAction("ConfirmationSuccess");
            }
            return RedirectToAction("ConfirmationFailure");
        }
        

        ConfirmAccount 方法检查数据库中是否存在匹配的未确认令牌,如果存在则将 isConfirmed 标志设置为 true。在设置为 true 之前,用户将无法登录。

        【讨论】:

          【解决方案4】:

          设置 requireConfirmationToken 为真:(如下图的第 4 个值)

          WebSecurity.CreateUserAndAccount(viewModel.UserName, viewModel.Password, null, true);
          

          来源 http://www.w3schools.com/aspnet/met_websecurity_createuserandaccount.asp

          【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-03-09
          • 2013-10-08
          • 1970-01-01
          • 1970-01-01
          • 2015-09-28
          • 2019-06-08
          相关资源
          最近更新 更多