SimpleMembership更新“isconfirmed”标志

时间:2012-10-10 21:33:58

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

我的用户表(我创建的表)包含以下列:

UserId,UserName,FirstName,LastName,DOB

我运行此命令后

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

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

我将如何进行" UnConfirming"用户或设置" IsConfirmed"使用新的SimpleMembership API在webpages_Membership中将其标记为false?

(之前,在使用"成员资格&#34之前使用简单会员之前;我可以使用api调用更新用户:Membership.UpdateUser(user);)

4 个答案:

答案 0 :(得分: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属性:

[Authorize(Roles = "User")]

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

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

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

答案 1 :(得分:1)

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

答案 2 :(得分:1)

请查看此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之前,用户将无法登录。

答案 3 :(得分:-1)

将requireConfirmationToken设为true :(第4个值如下所示)

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

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