ASP. NET Смена пароля только для администратора и удаление пользователя без электронной почты. - PullRequest
0 голосов
/ 06 февраля 2020

Я пытаюсь реализовать 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>";
    }
}

Я не знаю, это хорошо выбор с учетом вопросов безопасности.

1 Ответ

0 голосов
/ 06 февраля 2020

вам нужно передать объект пользователя в GeneratePasswordResetTokenAsyn c прямо сейчас вы передаете строку внутри переменной

var user =manager.FindByNameAsync(row.Cells[0].Text);//Hoping that row.Cells[0].Text is username of the user
var token = await manager.GeneratePasswordResetTokenAsync(user);
var result = await manager.ResetPasswordAsync(user, token, txtNewPass.Text.Trim());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...