Fix .gitignore. Keep using Email fields in view models.

This commit is contained in:
2026-01-26 22:28:57 +01:00
parent fac6f41910
commit e35125c306
7 changed files with 47 additions and 237 deletions

253
.gitignore vendored
View File

@@ -1,180 +1,7 @@
### VisualStudioCode template
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
### JetBrains+all template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### JetBrains template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# SonarLint plugin
.idea/sonarlint/
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### VisualStudio template
## Ignore Visual Studio temporary files, build results, and ## Ignore Visual Studio temporary files, build results, and
## files generated by popular Visual Studio add-ons. ## files generated by popular Visual Studio add-ons.
## ##
## Get latest from https://github.com/github/gitignore/blob/main/VisualStudio.gitignore ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore
# User-specific files # User-specific files
*.rsuser *.rsuser
@@ -182,6 +9,9 @@ fabric.properties
*.user *.user
*.userosscache *.userosscache
*.sln.docstates *.sln.docstates
BlazorEcommerce.db
BlazorEcommerce.db-shm
BlazorEcommerce.db-wal
# User-specific files (MonoDevelop/Xamarin Studio) # User-specific files (MonoDevelop/Xamarin Studio)
*.userprefs *.userprefs
@@ -196,7 +26,6 @@ mono_crash.*
[Rr]eleases/ [Rr]eleases/
x64/ x64/
x86/ x86/
[Ww][Ii][Nn]32/
[Aa][Rr][Mm]/ [Aa][Rr][Mm]/
[Aa][Rr][Mm]64/ [Aa][Rr][Mm]64/
bld/ bld/
@@ -235,9 +64,6 @@ project.lock.json
project.fragment.lock.json project.fragment.lock.json
artifacts/ artifacts/
# ASP.NET Scaffolding
ScaffoldingReadMe.txt
# StyleCop # StyleCop
StyleCopReport.xml StyleCopReport.xml
@@ -263,7 +89,6 @@ StyleCopReport.xml
*.tmp_proj *.tmp_proj
*_wpftmp.csproj *_wpftmp.csproj
*.log *.log
*.tlog
*.vspscc *.vspscc
*.vssscc *.vssscc
.builds .builds
@@ -315,11 +140,6 @@ _TeamCity*
.axoCover/* .axoCover/*
!.axoCover/settings.json !.axoCover/settings.json
# Coverlet is a free, cross platform Code Coverage Tool
coverage*.json
coverage*.xml
coverage*.info
# Visual Studio code coverage results # Visual Studio code coverage results
*.coverage *.coverage
*.coveragexml *.coveragexml
@@ -467,17 +287,6 @@ node_modules/
# Visual Studio 6 auto-generated workspace file (contains which files were open etc.) # Visual Studio 6 auto-generated workspace file (contains which files were open etc.)
*.vbw *.vbw
# Visual Studio 6 auto-generated project file (contains which files were open etc.)
*.vbp
# Visual Studio 6 workspace and project file (working project files containing files to include in project)
*.dsw
*.dsp
# Visual Studio 6 technical files
*.ncb
*.aps
# Visual Studio LightSwitch build output # Visual Studio LightSwitch build output
**/*.HTMLClient/GeneratedArtifacts **/*.HTMLClient/GeneratedArtifacts
**/*.DesktopClient/GeneratedArtifacts **/*.DesktopClient/GeneratedArtifacts
@@ -534,9 +343,6 @@ ASALocalRun/
# Local History for Visual Studio # Local History for Visual Studio
.localhistory/ .localhistory/
# Visual Studio History (VSHistory) files
.vshistory/
# BeatPulse healthcheck temp database # BeatPulse healthcheck temp database
healthchecksdb healthchecksdb
@@ -546,31 +352,6 @@ MigrationBackup/
# Ionide (cross platform F# VS Code tools) working folder # Ionide (cross platform F# VS Code tools) working folder
.ionide/ .ionide/
# Fody - auto-generated XML schema
FodyWeavers.xsd
# VS Code files for those working on multiple tools
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
*.code-workspace
# Local History for Visual Studio Code
.history/
# Windows Installer files from build outputs
*.cab
*.msi
*.msix
*.msm
*.msp
# JetBrains Rider
*.sln.iml
### JetBrains+iml template
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider # Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839 # Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
@@ -649,3 +430,29 @@ fabric.properties
# Android studio 3.1+ serialized cache file # Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser .idea/caches/build_file_checksums.ser
.vscode/*
!.vscode/settings.json
!.vscode/tasks.json
!.vscode/launch.json
!.vscode/extensions.json
!.vscode/*.code-snippets
# Local History for Visual Studio Code
.history/
# Built Visual Studio Code Extensions
*.vsix
#User Specific
*.userprefs
*.usertasks
#Mono Project Files
*.pidb
*.resources
test-results/
.idea/**/.idea/*
.vscode/**
stripe*.json
stripe.exe

View File

@@ -16,8 +16,8 @@
<DataAnnotationsValidator /> <DataAnnotationsValidator />
<div class="mb-3"> <div class="mb-3">
<label for="email">User Name</label> <label for="email">User Name</label>
<InputText id="email" @bind-Value="userLogin.UserName" class="form-control border border-primary" /> <InputText id="email" @bind-Value="userLogin.Email" class="form-control border border-primary" />
<ValidationMessage For="@(() => userLogin.UserName)" /> <ValidationMessage For="@(() => userLogin.Email)" />
</div> </div>
<div class="mb-3"> <div class="mb-3">
<label for="password">Password</label> <label for="password">Password</label>
@@ -51,8 +51,8 @@
private async Task Authenticate() private async Task Authenticate()
{ {
Console.WriteLine("***"); Console.WriteLine("***");
Console.WriteLine(userLogin.UserName); Console.WriteLine(userLogin.Email);
var result = await AuthService.Login(userLogin.UserName, userLogin.Password); var result = await AuthService.Login(userLogin.Email, userLogin.Password);
if (result.Success) if (result.Success)
{ {
_errorMessage = string.Empty; _errorMessage = string.Empty;

View File

@@ -41,6 +41,10 @@
<span>@errorMessage</span> <span>@errorMessage</span>
</div> </div>
<div class="@messageCssClass">
<span>@message</span>
</div>
@code { @code {
UserRegister user = new(); UserRegister user = new();

View File

@@ -4,9 +4,8 @@ namespace BlazorPolicyAuth.Models.ViewModels;
public class UserLogin public class UserLogin
{ {
//[Required, EmailAddress] [Required, EmailAddress]
//[Required] public string Email { get; set; } = string.Empty;
public string UserName { get; set; } = string.Empty; [Required]
//[Required]
public string Password { get; set; } public string Password { get; set; }
} }

View File

@@ -4,9 +4,9 @@ namespace BlazorPolicyAuth.Models.ViewModels
{ {
public class UserRegister public class UserRegister
{ {
//[Required, EmailAddress] [Required, EmailAddress]
public string Email { get; set; } = string.Empty; public string Email { get; set; } = string.Empty;
//[Required, StringLength(100, MinimumLength = 5)] [Required, StringLength(100, MinimumLength = 5)]
public string Password { get; set; } = string.Empty; public string Password { get; set; } = string.Empty;
[Compare("Password", ErrorMessage = "The password do not match.")] [Compare("Password", ErrorMessage = "The password do not match.")]
public string ConfirmPassword { get; set; } = string.Empty; public string ConfirmPassword { get; set; } = string.Empty;

View File

@@ -25,9 +25,9 @@ public class AuthService : IAuthService
_httpContextAccessor = httpContextAccessor; _httpContextAccessor = httpContextAccessor;
} }
public async Task<ServiceResponse<int>> Register ( string userName, string password) public async Task<ServiceResponse<int>> Register ( string email, string password)
{ {
if (await UserExists(userName)) if (await UserExists(email))
{ {
return new ServiceResponse<int> { Success = false, Message = "User already exist." }; return new ServiceResponse<int> { Success = false, Message = "User already exist." };
} }
@@ -35,7 +35,7 @@ public class AuthService : IAuthService
CreatePasswordHash(password, out byte[] passwordHash, out byte[] passwordSalt); CreatePasswordHash(password, out byte[] passwordHash, out byte[] passwordSalt);
var user = new UserAccount var user = new UserAccount
{ {
UserName = userName, UserName = email,
PasswordHash = passwordHash, PasswordHash = passwordHash,
PasswordSalt = passwordSalt PasswordSalt = passwordSalt
}; };

View File

@@ -5,7 +5,7 @@ namespace BlazorPolicyAuth.Services.AuthService;
public interface IAuthService public interface IAuthService
{ {
Task<ServiceResponse<int>> Register(string userName, string password); Task<ServiceResponse<int>> Register(string email, string password);
Task<bool> UserExists(string email); Task<bool> UserExists(string email);
Task<ServiceResponse<string>> Login(string email, string password); Task<ServiceResponse<string>> Login(string email, string password);
Task<ServiceResponse<bool>> ChangePassword(int userId, string newPassword); Task<ServiceResponse<bool>> ChangePassword(int userId, string newPassword);