When i trying to sign in or sign Up at my web app i receive this problem . enter image description here IAuthService:
using Ryzhanovskyi.University.Tinder.Models.Auth;
using Ryzhanovskyi.University.Tinder.Models.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ryzhanovskyi.University.Tinder.Core.Interfaces
{
public interface IAuthService
{
Task<User> RegisterAsync(UserRequestDto request);
Task<User> LoginAsync(UserRequestLogDto request);
Task<User> LoggoutAsync(UserRequestLogDto request);
}
}
AuthService:
using Azure.Core;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Internal;
using Ryzhanovskyi.University.Tinder.Core.Interfaces;
using Ryzhanovskyi.University.Tinder.Models.Auth;
using Ryzhanovskyi.University.Tinder.Models.Models;
using Ryzhanovskyi.University.Tinder.Web.Data;
using System;
using System.Collections.Generic;
using System.Data;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ryzhanovskyi.University.Tinder.Core.Services
{
public class AuthService : IAuthService
{
private readonly DataContext _context;
private readonly IEmailSender _emailSender;
private readonly SignInManager<User> _signInManager;
public AuthService(DataContext context, IEmailSender emailSender)
{
_context = context;
_emailSender = emailSender;
}
public async Task<User> RegisterAsync(UserRequestDto request)
{
if (await _context.Users.AnyAsync(u => u.Email == request.Email))
{
return null;
}
string passwordHash = BCrypt.Net.BCrypt.HashPassword(request.Password);
var user = new User
{
UserName = request.Username,
Email = request.Email,
PasswordHash = passwordHash
};
var welcomeEmail = new EmailModel
{
Email = request.Email,
Subject = "Mail for successfully registration at GnomeLove",
Message = $"Welcome {user.UserName} to Dating Web APP GnomeLove, good luck in searching your love ^_^"
};
await _emailSender.SendEmailAsync(welcomeEmail.Email, welcomeEmail.Subject, welcomeEmail.Message);
_context.Users.Add(user);
await _context.SaveChangesAsync();
return user;
}
public async Task<User> LoginAsync(UserRequestLogDto request)
{
var user = await _context.Users.FirstOrDefaultAsync(u => u.Email == request.Email);
if (user == null)
{
return null;
}
if (!BCrypt.Net.BCrypt.Verify(request.Password, user.PasswordHash))
{
return null;
}
return user;
}
public async Task<User> LoggoutAsync(UserRequestLogDto request)
{
var user = await _context.Users.FirstOrDefaultAsync(u => u.Email == request.Email);
if (user == null)
{
return null;
}
await _signInManager.SignOutAsync();
return user;
}
}
}
AuthController:
using Microsoft.AspNetCore.Mvc;
using System.Threading.Tasks;
using Ryzhanovskyi.University.Tinder.Core.Interfaces;
using Ryzhanovskyi.University.Tinder.Models.Auth;
using Ryzhanovskyi.University.Tinder.Models.Models;
using Ryzhanovskyi.University.Tinder.Core.Services;
using Microsoft.EntityFrameworkCore;
using Microsoft.AspNetCore.Identity;
using System.Data;
namespace Ryzhanovskyi.University.Tinder.Web.Controllers
{
[Route("[controller]")]
[ApiController]
public class AuthController : ControllerBase
{
private readonly IAuthService _authService;
public AuthController(IAuthService authService)
{
_authService = authService;
}
[HttpPost("register")]
public async Task<ActionResult<User>> Register(UserRequestDto request)
{
var user = await _authService.RegisterAsync(request);
if (user == null)
{
return BadRequest("Email is already registered.");
}
return Ok(user);
}
[HttpPost("login")]
public async Task<ActionResult<User>> Login(UserRequestLogDto request)
{
var user = await _authService.LoginAsync(request);
if (user == null)
{
return BadRequest("Invalid email or password.");
}
return Ok(user);
}
[HttpPost("logout")]
public async Task<IActionResult> Logout(UserRequestLogDto request)
{
var result = await _authService.LoggoutAsync(request);
if (result != null)
{
return Ok("Logout successful.");
}
else
{
return BadRequest("Logout failed.");
}
}
}
}
_LoginPartial:
@using Ryzhanovskyi.University.Tinder.Models.Models;
@using Microsoft.AspNetCore.Identity;
@inject SignInManager<User> signInManager
<ul class="navbar-nav">
@if (signInManager.IsSignedIn(User))
{
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdown" role="button" data-bs-toggle="dropdown" aria-expanded="false">
@User.Identity!.Name!
</a>
<ul class="dropdown-menu" aria-labelledby="navbarDropdown">
<li>
<a class="dropdown-item" asp-controller="Auth" asp-action="loggout">
Logout
</a>
</li>
</ul>
</li>
}
else{
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Auth" asp-action="register">Register</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-controller="Auth" asp-action="login">Login</a>
</li>
}
</ul>
Layout:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-16" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>@ViewData["Title"] - Ryzhanovskyi.University.Tinder.Web</title>
<link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.min.css" />
<link rel="stylesheet" href="~/css/site.css" asp-append-version="true" />
<link rel="stylesheet" href="~/Ryzhanovskyi.University.Tinder.Web.styles.css" asp-append-version="true" />
<link rel="shortcut icon" type="image/svg" href="/favicon.ico" />
</head>
<body>
<header>
<nav class="navbar navbar-expand-sm navbar-toggleable-sm navbar-light bg-white border-bottom box-shadow mb-3">
<div class="container">
<a class="navbar-brand mr-auto" asp-area="" asp-page="/Index">GnomeLove</a>
<button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target=".navbar-collapse" aria-controls="navbarSupportedContent"
aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="navbar-collapse collapse d-sm-inline-flex justify-content-between">
<ul class="navbar-nav flex-grow-1">
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Index">Home</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" href="/swagger">Swagger UI</a>
</li>
<li class="nav-item">
<a class="nav-link text-dark" asp-area="" asp-page="/Privacy">Privacy</a>
</li>
</ul>
<partial name="_LoginPartial" />
</div>
</div>
</nav>
</header>
<div class="container">
<main role="main" class="pb-3">
@RenderBody()
</main>
</div>
<footer class="border-top footer text-muted">
<div class="container">
© 2024 - Mykhailo Ryzhanovskyi - <a asp-area="" asp-page="/Privacy">Privacy</a>
</div>
</footer>
<script src="~/lib/jquery/dist/jquery.min.js"></script>
<script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script>
<script src="~/js/site.js" asp-append-version="true"></script>
@await RenderSectionAsync("Scripts", required: false)
</body>
</html>
User:
using Microsoft.AspNetCore.Identity;
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Ryzhanovskyi.University.Tinder.Models.Models
{
public class User : IdentityUser
{
[Required]
public override string UserName { get; set; } = string.Empty;
[Required]
public override string PasswordHash { get; set; } = string.Empty;
[Required]
[EmailAddress(ErrorMessage = "Invalid email adress.")]
public override string Email { get; set; } = string.Empty;
public int Age { get; set; } = 18;
public string Gender { get; set; } = string.Empty;
public string City { get; set; } = string.Empty;
public string Description { get; set; } = string.Empty;
public string Photo { get; set; } = string.Empty;
}
}
I was trying to change utf-8 to utf-16 but it doesnt work, and watches video or im stupid or cant understand this.
i expecting to fix this problem, Thanks!