Я пытаюсь реализовать asp идентификацию и безопасность. Я ввожу логин, создаю нового пользователя и при создании нового пользователя назначаю роль этому пользователю. Новый пользователь зарегистрирован с именем пользователя и паролем НЕ EMAIL . Только администратор может добавлять новых пользователей, потому что он может получить доступ только к странице администратора.
Итак, следующая проблема - я хочу разрешить администратору сбросить пароль и удалить пользователей. Моя логика c заключается в том, что я перечисляю всех пользователей (это частное приложение, так что их должно быть слишком много) в 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
Я получаю удалить пользователя на "classi c way"
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>";
}
}
Я не знаю, это хорошо выбор с учетом вопросов безопасности.