我正在尝试实现 asp 身份和 owin 安全性。我实现登录,创建新用户,并在创建新用户时为该用户分配角色。新用户使用用户名和密码NOT EMAIL注册。只有管理员才能添加新用户,因为他只能访问管理员页面。
所以下一个问题是我想允许管理员重置密码和删除用户。我的逻辑是我在 gridview 中列出所有用户(它是私有应用程序,所以它想要太多用户)并用两个按钮来做这件事。所以我得到用户但重置不起作用。
我发现了像这个LINK这样的问题, 但我没有找到任何解决方案。
这是我添加新用户的方法,它正在工作。
var userStore = new UserStore<IdentityUser>();
var manager = new UserManager<IdentityUser>(userStore);
var user = new IdentityUser() { UserName = txtUser.Text };
IdentityResult result = manager.Create(user, txtPass.Text);
if (result.Succeeded && ddlRole.SelectedValue=="1")
{
var roleresult = manager.AddToRole(user.Id, "User");
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
var userIdentity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
authenticationManager.SignIn(new AuthenticationProperties() { }, userIdentity);
Response.Redirect("~/Login.aspx");
}
else if (result.Succeeded && ddlRole.SelectedValue == "2")
{
var roleresult = manager.AddToRole(user.Id, "Administrator");
var authenticationManager = HttpContext.Current.GetOwinContext().Authentication;
var userIdentity = manager.CreateIdentity(user, DefaultAuthenticationTypes.ApplicationCookie);
authenticationManager.SignIn(new AuthenticationProperties() { }, userIdentity);
Response.Redirect("~/Login.aspx");
}
else
{
StatusMessage.Text = result.Errors.FirstOrDefault();
}
我尝试使用此方法重置密码
protected async void btnReset_Click(object sender, EventArgs e)
{
var userStore = new UserStore<IdentityUser>();
var manager = new UserManager<IdentityUser>(userStore);
GridViewRow row = ((Button)sender).NamingContainer as GridViewRow;
var user = row.Cells[0].Text;
var token = await manager.GeneratePasswordResetTokenAsync(user);
var result = await manager.ResetPasswordAsync(user, token, txtNewPass.Text.Trim());
if (result.Succeeded)
Literal1.Text = "Uspješno promijenjena lozinka";
else
Literal1.Text = "Nismo uspjeli promijeniti lozinku!";
}
但它不起作用。
如果有人可以帮助我重置密码或删除用户,我很感激。
问候
更新 1
我以“经典方式”删除用户
GridViewRow row = ((Button)sender).NamingContainer as GridViewRow;
Label lblUserID = row.FindControl("lblUserID") as Label;//Hidden User ID
String conStr = ConfigurationManager.ConnectionStrings[""].ToString();
using (SqlConnection conn = new SqlConnection(conStr))
{
conn.Open();
string sQuery = "DELETE FROM AspNetUsers WHERE Id=@employeeID";
SqlCommand cmd = new SqlCommand(sQuery, conn);
cmd.Parameters.AddWithValue("@employeeID", lblUserID.Text);
try
{
cmd.ExecuteNonQuery();
Literal1.Text = "Uspješno izbrisan korisnik <span class=\"bg-red\">" + row.Cells[1].Text + "</span>";
ListUsers();
}
catch
{
Literal1.Text = "<span class=\"bg-red\">Neuspješno brisanje</span>";
}
}
考虑到安全问题,我不知道这是一个不错的选择。