No ja właśnie swoją apkę mam tak zrobioną. Logowanie i użytkownicy są domyślnym mechanizmem, a wymiana danych jest za pomocą metod, które ci wysłałem, z tabel, które sam stworzyłem. Napisałeś, że robisz swoje klasy, aby uwolnić się od EF, a później piszesz, że chcesz używać domyślnych mechanizmów (nawet z EF). Ja to mam zrobione w .NET Core WebPages (Razor). Logowanie mam podzielone na dwie części (tak jak ma Microsoft na swoich stronach), najpierw Email, a poźniej hasło. To jest model do podania Email. Używam UserManager
i ApplicationDbContext
. Baza została wygenerowana automatycznie przez Visual Studio podczas tworzenia projektu. Później tylko dodałem swoje tabelki i wyciągam z nich dane klasą jaką ci wysłałem wyżej.
public class LoginEmailModel : PageModel
{
private readonly string _externalCookieScheme;
private readonly SignInManager<ApplicationUser> _signInManager;
private readonly ILogger<LoginEmailModel> _logger;
private readonly UserManager<ApplicationUser> _userManager;
private readonly ApplicationDbContext _db;
public LoginEmailModel(UserManager<ApplicationUser> userManager, SignInManager<ApplicationUser> signInManager, ILogger<LoginEmailModel> logger, ApplicationDbContext db)
{
_signInManager = signInManager;
_externalCookieScheme = IdentityConstants.ApplicationScheme;
_logger = logger;
_userManager = userManager;
_db = db;
}
[BindProperty]
public string Email { get; set; }
[TempData]
public string ErrorMessage { get; set; }
public async Task<IActionResult> OnGetAsync()
{
if (!string.IsNullOrEmpty(ErrorMessage))
ModelState.AddModelError(string.Empty, ErrorMessage);
return Page();
}
public async Task<IActionResult> OnPostAsync(string email)
{
try
{
var user = await _userManager.FindByEmailAsync(email);
string redirectString = string.Empty;
if (user == null)
{
ErrorMessage = "Brak podanego u¿ytkownika w bazie danych";
return RedirectToPage("/Account/LoginEmail");
}
var bu = SQL.GetData<BazyUzytkownikow>(_db.Database.GetDbConnection().ConnectionString, $"select * from dbo.BazyUzytkownikow where UsR_UsRId like '{user.Id}'");
var b = SQL.GetData<Baza>(_db.Database.GetDbConnection().ConnectionString, $"select * from dbo.Baza where BzD_BzDId = {bu.First().BzD_BzDId}");
if (b.Count > 0)
{
redirectString = $"/Account/LoginPassword?email={email}&firma={b.First().BzD_Nazwa}";
}
if (user != null)
return Redirect(redirectString);
}
catch(Exception ex) { return Redirect(Methods.ExceptionPage(ex)); }
return Page();
}
}
PS.
Nie mam rejestracji, ponieważ to jest zamknięta platforma i to ja osobiście rejestruje.