Diskuze: ASP.MVC Update po loginu
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.

Tvůrce

Zobrazeno 10 zpráv z 10.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Test znalostí C# .NET online, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
jaký máš studio a MVC. Já mám 2013 a MVC 5.1.0.0 a žádný RegDate ani LoginDate. Mám to všechno by default.
Každopádně pokud chci hledat kód po loginu, tak není moc logické hledat
v metodě Edit. . Vsadil bych
na AccountController a nějakou metodu Login.
Vím, regdate a login date, jsem si tám přidal jak pišu, v edit jsem koukal ja to vlastne pracuje, jelikož update LoginDate je vlastne edit.
Obávám se že takhle se s žádným programátorem nedomluvíš. Oni nemají křišťálovou kouli aby věděli co kdes ty jak udělal a o čem to mluvíš. Základem je vynechat abstraktní pojmy. Tak to s zkusíme ještě jednou.
Ty máš v tabulce pro uživatele dva sloupce navíc. Vůbec jsi nepsal, že sis je tam sám přidal a pokud ano, nenapsal jsi jak. Nezdá se to, ale může to být důležité.
Pak máme nějakou magickou metodu Edit. Jelikož každý Controller může mít Edit bylo by dobrý ji sem hodit. Pravděpodobně půjde o template při použití EF, ale tak pro jistotu...
Osobně tuším, ale nejsem vědma
Ak máš vygenerovaný AccountController, tak bude vyzerať asi nejako takto.
// POST: /Account/Login
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(LoginViewModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var user = await UserManager.FindAsync(model.UserName, model.Password);
if (user != null)
{
await SignInAsync(user, model.RememberMe);
// Zalogovať prihlásenie
return RedirectToLocal(returnUrl);
}
else
{
ModelState.AddModelError("", "Invalid username or password.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
Predtým ako zavoláš ten return RedirectToLocal(returnUrl), môžeš robiť aké úpravy chceš. Aspoň teda myslím, že overenia hesla je v tom FindAsync a SignInAsync ti už len prihlási usera. Každopádne, možno by bolo rozumnejšie vytvoriť nejakú log tabuľku, kde budeš zapisovať prihlásenia. Aspoň nebudeš mať len to posledné.
A update...ten objekt user by mal mať aj tie tvoje rozšírené property, takže stačí do tej property LoginDate, dať aktuálny čas a potom (strielam od brucha, neskúšal som) UpdateAsync().
user.LogInDate = DateTime.Now;
UserManager.UpdateAsync(user);
Ešte dodám, že ak si rozšíril toho IdentityUsera, nezabudni aj upraviť
ten dbContext, aby pracoval s tým rozšíreným (viď. odstavec Extending the
IdentityModel Class with Additional Properties).
http://www.codeproject.com/…ntity-Accoun
A do tretice samozrejme oprava (už mi nejde upraviť koment).
await UserManager.UpdateAsync(user);
Každopádne som to otestoval a funguje to takto
Menši dotaz ještě, jak je to u LogOut ?
Tam musím nějak převzít ID nebo Email uživatele, ale teď nevím jak.
System.Web.Security.Membership.GetUser().ProviderUserKey;
Zobrazeno 10 zpráv z 10.