Правильно сохраните поле электронной почты через регистрационную форму в приложении ASP.NET Core MVC.C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Правильно сохраните поле электронной почты через регистрационную форму в приложении ASP.NET Core MVC.

Сообщение Anonymous »

У меня есть небольшое приложение для просмотра фильмов, оно позволяет пользователям регистрироваться, входить в систему, добавлять записи о фильмах и добавлять комментарии к записям о фильмах. Но в регистрационной форме поле электронной почты неправильно отправляет адреса электронной почты и не сохраняет их в базе данных должным образом.
Я выполнил действия с помощью отладчика и нашел эту строку в
AccountController var identityResult = await userManager.CreateAsync(user, registerViewModel.Password);

Я вижу, что имя пользователя, адрес электронной почты и пароль успешно введены. Но тогда на этой строчке
if (identityResult.Succeeded)
{

Я вижу, чтоidentResult не удалось. И внизу того же метода публикации регистрации в этой части
foreach (var error in identityResult.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}

когда я оставляю это так, в верхней части страницы регистрации отображается сообщение об ошибке

Электронная почта '' недействителен

Я также пробовал так:
foreach (var error in identityResult.Errors)
{
// ....
ModelState.AddModelError(string.Empty, user.Email);
}

Когда я пытаюсь зарегистрировать пользователя таким образом, я получаю следующее сообщение вверху страницы регистрации: tim123@gmail.com
Поэтому мне кажется, что между этими двумя строками что-то не так:
var identityResult = await userManager.CreateAsync(user, registerViewModel.Password);

if (identityResult.Succeeded)

Вот мой контроллер учетной записи:
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using MovieOrganizer.Models.ViewModels;
using MovieOrganizer.Models.Domain;

namespace MovieOrganizer.Controllers
{
public class AccountController : Controller
{
private readonly UserManager userManager;
private readonly SignInManager signInManager;

public AccountController(UserManager userManager,
SignInManager signInManager)
{
this.userManager = userManager;
this.signInManager = signInManager;
}

[HttpGet]
public IActionResult Register()
{
return View();
}

[HttpPost]
public async Task Register(RegisterViewModel registerViewModel)
{
var user = new User
{
UserName = registerViewModel.UserName,
Email = registerViewModel.Email,
//PasswordHash = registerViewModel.Password
};

//var identityResult = await userManager.CreateAsync(user, registerViewModel.Password);
var identityResult = await userManager.CreateAsync(user, registerViewModel.Password);

if (identityResult.Succeeded)
{
var roleIdentityResult = await userManager.AddToRoleAsync(user, "User");

if (roleIdentityResult.Succeeded)
{
//return RedirectToAction("Register");
await signInManager.SignInAsync(user, isPersistent: false);

return RedirectToAction("Index", "Movies");
}
}
else
{
foreach (var error in identityResult.Errors)
{
ModelState.AddModelError(string.Empty, user.Email);
}
}

return View(registerViewModel);
}

[HttpGet]
public IActionResult Login()
{
var model = new LoginViewModel
{

};

return View(model);
}

[HttpPost]
public async Task Login(LoginViewModel loginViewModel)
{
if (!ModelState.IsValid)
{
return View(loginViewModel);
}

var user = await userManager.FindByNameAsync(loginViewModel.UserName);

if (user == null)
{
// User not found
ModelState.AddModelError(string.Empty, "Invalid username.");
return View(loginViewModel);
}

var signInResult = await signInManager.PasswordSignInAsync(loginViewModel.UserName,
loginViewModel.Password, false, false);

if (signInResult != null && signInResult.Succeeded)
{
//if (!string.IsNullOrWhiteSpace(loginViewModel.ReturnUrl))
//{
// return Redirect(loginViewModel.ReturnUrl);
//}

return RedirectToAction("Index", "Movies");
}

if (signInResult.IsLockedOut)
{
ModelState.AddModelError(string.Empty, "User account locked out.");
}
else if (signInResult.IsNotAllowed)
{
ModelState.AddModelError(string.Empty, "User account not allowed.");
}
else
{
ModelState.AddModelError(string.Empty, "Invalid password.");
}

return View(loginViewModel);
}

[HttpGet]
public async Task Logout()
{
await signInManager.SignOutAsync();
return RedirectToAction("Index", "Home");
}

[HttpGet]
public IActionResult AccessDenied()
{
return View();
}
}
}

Вот моя RegisterViewModel:
using System.ComponentModel.DataAnnotations;

namespace MovieOrganizer.Models.ViewModels
{
public class RegisterViewModel
{
[Required]
public string UserName { get; set; }

[Required]
[EmailAddress]
public string Email { get; set; }

[Required]
[MinLength(6, ErrorMessage = "Password has to be at least 6 characters")]
public string Password { get; set; }
}
}

и вот мое представление Register.cshtml:
@model MovieOrganizer.Models.ViewModels.RegisterViewModel

Sign Up for Movie Library

@if (ViewData.ModelState.IsValid == false && ViewData.ModelState.ErrorCount > 0)
{
foreach (var error in ViewData.ModelState.Values.SelectMany(v => v.Errors))
{
@error.ErrorMessage
}
}




Register




Username



Email



Password



Password Confirmation



Register



Log in with Google



Это мой файл Program.cs:
using Microsoft.AspNetCore.Identity;
using Microsoft.EntityFrameworkCore;
using MovieOrganizer.Data;
using MovieOrganizer.Models.Domain;
using MovieOrganizer.Repositories;

var builder = WebApplication.CreateBuilder(args);

// Add services to the container.
builder.Services.AddControllersWithViews();

builder.Services.AddDbContext(options =>
options.UseSqlServer(builder.Configuration.GetConnectionString("MovieOrganizerCon")));

builder.Services.AddIdentity(options =>
{
options.Password.RequireDigit = true;
options.Password.RequireLowercase = true;
options.Lockout.DefaultLockoutTimeSpan = TimeSpan.FromMinutes(5);
options.Lockout.MaxFailedAccessAttempts = 5;
options.User.RequireUniqueEmail = true;
})
.AddEntityFrameworkStores()
.AddDefaultTokenProviders();

//builder.Services.AddIdentity()
// .AddEntityFrameworkStores();

builder.Services.AddScoped();
builder.Services.AddScoped();

builder.Services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});

builder.Services.AddScoped();
builder.Services.AddScoped();

var app = builder.Build();

using (var scope = app.Services.CreateScope())
{
var roleManager = scope.ServiceProvider.GetRequiredService();
var userManager = scope.ServiceProvider.GetRequiredService();

string[] roleNames = { "User" };

foreach(var roleName in roleNames)
{
var roleExist = await roleManager.RoleExistsAsync(roleName);

if (!roleExist)
{
await roleManager.CreateAsync(new IdentityRole(roleName));
}
}
}

// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();

app.UseSession();

app.UseAuthentication();
app.UseAuthorization();

app.MapControllerRoute(
name: "default",
pattern: "{controller=Movies}/{action=Index}/{id?}");

app.Run();


Подробнее здесь: https://stackoverflow.com/questions/791 ... re-mvc-app
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»