Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
tomas
Člen
Avatar
tomas:16.1.2013 11:39

Dobrý den, řesím jeden problém. Předělávám firemní web z php na asp.net. Původná web běžel na posgresql, já tabulky převedl pod mssql. V původním web je tabulka uživatelů, kde jsou informace o uživatelích včetně jejich přihlašovacích údajů(heslo je ve tvaru md5). A teď k problému, nějak nevím jak udělat ověřování uživatelů. Všude co jsem se dočetl, tak se v ASP používají mamber provider, ale ty potřebují vytvořit vlastní tabulky. To já ale nepotřebuji, uživatele mám v db včetně všech údajů. Poradíte mě, jak vytvořit bezpečné přihlášení, které bude ověřovat uživatele vůči mé DB? Stačí nějaký návod či odkaz, kde bych zjistil jak se to řeší.

 
Odpovědět
16.1.2013 11:39
Avatar
David Hartinger
Vlastník
Avatar
Odpovídá na tomas
David Hartinger:16.1.2013 11:54

Můžeš to přeci udělat úplně stejně jako v PHP.

Edit: Lepší je ale samozřejmě převést to do způsobu, co používá ASP. Ten MemberShip by měl jít upravit tak, aby sis ověřování údajů udělal sám. Použiješ tedy jen tu část co se stará o udržení relace.

Link na vytvoření vlastního: http://msdn.microsoft.com/…vs.100).aspx

Osobně bych tu DB asi převedl, je dobré jít stejnou cestou jako jde ASPčko.

Editováno 16.1.2013 12:01
Nahoru Odpovědět
16.1.2013 11:54
You are the greatest project you will ever work on.
Avatar
tomas
Člen
Avatar
Odpovídá na David Hartinger
tomas:16.1.2013 12:20

Dík za tip, já bych to taky radeji prevedl, mam to i nachystany, ale neni to na mě. Hlavně je důležitý, že původní ID uživatelů jsou svázány v několika dalších tabulkách.

 
Nahoru Odpovědět
16.1.2013 12:20
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Hartinger
Kit:16.1.2013 12:21

Myslel jsem si, že úplný převod z PostgreSQL do MSSQL není možný, protože PostgreSQL má hromadu rozšíření, ale pokud se ta rozšíření nepoužívají, tak by to jít mohlo.

Nahoru Odpovědět
16.1.2013 12:21
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na tomas
Kit:16.1.2013 12:23

Pokud data vyexportuješ přes XML, tak tě původní ID nemusí zajímat a do MSSQL to můžeš zase naimportovat.

Nahoru Odpovědět
16.1.2013 12:23
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
tomas
Člen
Avatar
tomas:16.1.2013 12:28

Tabulky už mám převedené v mssql. Udělal jsem aplikaci, která mě tabulky převedla a opravila vazby.

 
Nahoru Odpovědět
16.1.2013 12:28
Avatar
matesax
Tvůrce
Avatar
Odpovídá na tomas
matesax:16.1.2013 16:41

Buď budeš ochoten pomocí programu - jednoduchého cyklu - přepsat data z tvé DB do takového uskupení, jaké používá MemberShipProvider a budeš mít jednodušší život - skoro o nic se nebudeš muset starat - a jak jsem psal - to přepsání by bylo jednoduché. Jakmile ale budeš dělat vlastní validaci, ztrácí smysl dělat to přes MemberShipProvider - to ti dá akorát více práce... Jednoduché UAC:

public class LogOnModel
{
        public string LNick { get; set; }

        public string LPassword { get; set; }

        public bool LRememberMe { get; set; }
}

[PropertiesMustMatch("NewPassword", "ConfirmPassword", ErrorMessage = "Heslo a ověřovací heslo se neshodují.")]
public class ChangePasswordModel
{
    [Required]
    [DataType(DataType.Password)]
    public string OldPassword { get; set; }

    [Required]
    [ValidatePasswordLength]
    [DataType(DataType.Password)]
    public string NewPassword { get; set; }

    [Required]
    [DataType(DataType.Password)]
    public string ConfirmPassword { get; set; }
}

[PropertiesMustMatch("Password", "ConfirmPassword", ErrorMessage = "Heslo a potvrzovací heslo se neshodují.")]
public class RegisterModel
{
    [Required]
    public string Nick { get; set; }

    [Required]
    [DataType(DataType.EmailAddress)]
    public string Email { get; set; }

    [Required]
    [ValidatePasswordLength]
    [DataType(DataType.Password)]
    public string Password { get; set; }

[Required] - nutné a MustMatch snad nemusím překládat. Takže pak jen použiješ:

ModelState.IsValid

Což ověří první vlnu - shodují se údaje, co se mají shodovat a povinné údaje nejsou null.

Přihlášení:

[HttpPost]
public ActionResult Index(LogOnModel model)
{
    if (MembershipService.ValidateUser(model.LNick, model.LPassword))
    {
        FormsService.SignIn(model.LNick, model.LRememberMe);

        return RedirectToAction("Index");
    }
    else
        ViewData["LogIn"] = "The nick or password is incorrect.";

    return View(model);
}

Zde nevaliduji první vlnu - jelikož to mám řešené přes AJAX.

Takto vypadá registrace:

[HttpPost]
public ActionResult Registration(RegisterModel model)
{
        if (ModelState.IsValid)
        {
            MembershipCreateStatus createStatus = MembershipService.CreateUser(model.Nick, model.Password, model.Email);

            if (createStatus == MembershipCreateStatus.Success)
                {
                        FormsService.SignIn(model.Nick, model.RememberMe);
                        return RedirectToAction("Index", "Home");
                }
            else
                ModelState.AddModelError("", AccountValidation.ErrorCodeToString(createStatus));
        }

        return View(model);
}

Kde:

public bool ValidateUser(string nick, string password)
{
    if (String.IsNullOrEmpty(nick))
                throw new ArgumentException("Hodnota nemůže být prázdná.", "nick");

    if (String.IsNullOrEmpty(password))
                throw new ArgumentException("Hodnota nemůže být prázdná.", "password");

    return _provider.ValidateUser(nick, password);
}

A využívám databázi MySQL...

Editováno 16.1.2013 16:42
 
Nahoru Odpovědět
16.1.2013 16:41
Avatar
tomas
Člen
Avatar
Odpovídá na matesax
tomas:17.1.2013 8:22

Dík, moc mě to pomohlo.

 
Nahoru Odpovědět
17.1.2013 8:22
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 8 zpráv z 8.