Přidej si svou IT školu do profilu a najdi spolužáky zde na síti :)

Diskuze: ASP.MVC Update po loginu

C# .NET .NET (C# a Visual Basic) ASP.MVC Update po loginu American English version English version

Aktivity (1)
Avatar
Bogdan
Redaktor
Avatar
Bogdan:3.6.2014 17:11

Hoj,

chtěl bych se zeptát, jak se dá updatovát tabulka po přihlášení uživatele?
Jedu samozřejmě z te šablony co VS vygeneruje.

Mám v AspNewUsers sloupec RegDate což je ok, a pak mám LoginDate, to potřebuji nějak po každém přihlášení updatovat.

Mužete mi poradit jak na to (koukal jsem na metodu edit po scaffoldu, ale nějak nechapu jak to updatuje)? Možna to bude taky někoho zajimat.

 
Odpovědět 3.6.2014 17:11
Avatar
annihilator
Člen
Avatar
annihilator:3.6.2014 17:58

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.

Nahoru Odpovědět 3.6.2014 17:58
Hnát se za bystrým zrakem v království jednookých - uzavíráním diskuzí je krátkozraké
Avatar
Bogdan
Redaktor
Avatar
Odpovídá na annihilator
Bogdan:4.6.2014 18:00

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.

 
Nahoru Odpovědět 4.6.2014 18:00
Avatar
Milan Křepelka
Redaktor
Avatar
Milan Křepelka:4.6.2014 19:02

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 :-)

 
Nahoru Odpovědět 4.6.2014 19:02
Avatar
Andrej Farkaš:6.6.2014 8:56

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(re­turnUrl), 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);
Editováno 6.6.2014 8:59
Nahoru Odpovědět  +1 6.6.2014 8:56
Live. Love. Learn.
Avatar
Odpovídá na Bogdan
Andrej Farkaš:6.6.2014 9:04

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

Nahoru Odpovědět  +1 6.6.2014 9:04
Live. Love. Learn.
Avatar
Odpovídá na Bogdan
Andrej Farkaš:6.6.2014 9:10

A do tretice samozrejme oprava (už mi nejde upraviť koment).

await UserManager.UpdateAsync(user);

Každopádne som to otestoval a funguje to takto ;-)

Nahoru Odpovědět  +1 6.6.2014 9:10
Live. Love. Learn.
Avatar
Bogdan
Redaktor
Avatar
Odpovídá na Andrej Farkaš
Bogdan:6.6.2014 12:07

WoW, díky moc, moc jsi mi pomohl :)

 
Nahoru Odpovědět 6.6.2014 12:07
Avatar
Bogdan
Redaktor
Avatar
Odpovídá na Andrej Farkaš
Bogdan:6.6.2014 15:53

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.

Editováno 6.6.2014 15:54
 
Nahoru Odpovědět 6.6.2014 15:53
Avatar
Odpovídá na Bogdan
Andrej Farkaš:10.6.2014 7:45
System.Web.Security.Membership.GetUser().ProviderUserKey;
Editováno 10.6.2014 7:45
Nahoru Odpovědět  +1 10.6.2014 7:45
Live. Love. Learn.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 10 zpráv z 10.