11
votes

ASP.NET MVC et authentification de connexion

J'ai recherché de nombreux messages ici concernant l'authentification personnalisée de l'utilisateur, mais aucun n'a adressé toutes mes préoccupations

Je suis nouveau sur ASP.NET MVC et avez utilisé traditionnel ASP.NET (WebForms) mais ne sais pas comment construire un Mécanisme de connexion / authentification pour un utilisateur utilisant ASP.NET MVC. P>

protected void Login1_Authenticate(object sender, AuthenticateEventArgs e)
{
    string userName = Login1.UserName;
    string password = Login1.Password;
    bool rememberUserName = Login1.RememberMeSet;

    if (validateuser(userName, password))
    {
        //Fetch the role
        Database db = DatabaseFactory.CreateDatabase();


        //Create Command object
        System.Data.Common.DbCommand cmd = db.GetStoredProcCommand("sp_RolesForUser");
        db.AddInParameter(cmd, "@Uid", System.Data.DbType.String, 15);
        db.SetParameterValue(cmd, "@Uid", Login1.UserName);
        System.Data.IDataReader reader = db.ExecuteReader(cmd);
        System.Collections.ArrayList roleList = new System.Collections.ArrayList();
        if (reader.Read())
        {
            roleList.Add(reader[0]);
            string myRoles = (string)roleList[0];

            //Create Form Authentication ticket
            //Parameter(1) = Ticket version
            //Parameter(2) = User ID
            //Parameter(3) = Ticket Current Date and Time
            //Parameter(4) = Ticket Expiry
            //Parameter(5) = Remember me check
            //Parameter(6) = User Associated Roles in this ticket
            //Parameter(7) = Cookie Path (if any)
            FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, userName, DateTime.Now,
            DateTime.Now.AddMinutes(20), rememberUserName, myRoles, FormsAuthentication.FormsCookiePath);

            //For security reasons we may hash the cookies
            string hashCookies = FormsAuthentication.Encrypt(ticket);
            HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, hashCookies);

            // add the cookie to user browser
            Response.Cookies.Add(cookie);

            if (HttpContext.Current.User.IsInRole("Administrators"))
            {
                Response.Redirect("~/Admin/Default.aspx");
            }
            else
            {
                string returnURL = "~/Default.aspx";

                // get the requested page
                //string returnUrl = Request.QueryString["ReturnUrl"];
                //if (returnUrl == null)
                //   returnUrl = "~/Default.aspx";
                Response.Redirect(returnURL);
            }
        }
    }
}

  protected bool validateuser(string UserName, string Password)
  {
    Boolean boolReturnValue = false;

    //Create Connection using Enterprise Library Database Factory
    Database db = DatabaseFactory.CreateDatabase();

    //Create Command object
    DbCommand cmd = db.GetStoredProcCommand("sp_ValidateUser");

    db.AddInParameter(cmd, "@userid", DbType.String, 15);
    db.SetParameterValue(cmd, "@userid", Login1.UserName);

    db.AddInParameter(cmd, "@password", DbType.String, 15);
    db.SetParameterValue(cmd, "@password", Login1.Password);

    db.AddOutParameter(cmd, "@retval", DbType.Int16, 2);
    db.ExecuteNonQuery(cmd);

    int theStatus = (System.Int16)db.GetParameterValue(cmd, "@retval");

    if (theStatus > 0)  //Authenticated user
        boolReturnValue = true;
    else  //UnAuthorized...
        boolReturnValue = false;

    return boolReturnValue;
}


5 commentaires

ASPnet MVC expédie avec un composant d'adhésion époustouflé complet, quelles caractéristiques est-elle en désordre? Vous pouvez lire CODEPLEX.COM/MVCMembership pour commencer


Fortement d'accord avec Jay Zeng. NE PAS (incorrectement) Réinventer l'appartenance: blogs.teamb.com/craigstzz/ 2009/09/09/38390


Bien peut-il être aussi personnalisable que je veux? Comme la table des tableaux d'utilisateurs et les rôles sont différents parce que je suis attaché à développer une application d'assistance et que l'enregistrement n'est pas pour le public comme seul administrateur peut créer les utilisateurs. Puis-je personnaliser de cette façon?


Oui. L'adhésion hors de la boîte permet de limiter les actions (telles que l'enregistrement) par nom d'utilisateur ou rôle. En fait, nos applications d'expédition font exactement ce que vous décrivez.


une bonne vidéo ou tutoriel disponible pour que je puisse prendre un départ rapide et peut mettre en œuvre à l'aide SqlServer 2008? Partager les soins liens?


4 Réponses :


5
votes

Compte tenu de vos commentaires concernant les tutoriels, veuillez consulter le ASP.net/mvc apprendre section sur la sécurité .

en particulier, Ce tutoriel sur la création d'une application Web sécurisée ASP.NET MVC 5 avec connexion, confirmation par courrier électronique et réinitialisation du mot de passe.


0 commentaires

32
votes

Vous pouvez écrire votre service d'authentification par vous-même. Voici une courte histoire:

Votre classe de modèle utilisateur (c.-à-d.) P> xxx pré>

Votre classe de contexte (c.-à-d.) P>

[Authorize]
public class ClassController : Controller
{
   ...
}


7 commentaires

Ne pas travailler à moi..plusez-moi m'aider à résoudre. Il redirige à la maison mais je pense que l'authentification ne fonctionne pas car elle redirige à nouveau pour vous connecter. Comment résoudre ceci?


@Datzme Regardez le cookie de votre navigateur pour voir si l'authentification est définie ou non.


Ouais je l'ai eu mate..J'ai trouvé le problème dans mon web.config


@Hamidreza, je ne suis pas en mesure de trouver le contexte contexte = nouveau contexte ();


@Datzme i obtenez context.utilisateurs n'est pas défini, aide s'il vous plaît


@Niteeshkumar J'ai ajouté une classe de contexte à la réponse.


@Shahidod j'ai ajouté une classe de contexte à la réponse.



-1
votes

Code:

using Microsoft.AspNet.Identity;


if (Request.IsAuthenticated)
{
    return View();
}


1 commentaires

Veuillez éditer avec plus d'informations. Les réponses ne sont découragées, car elles ne contiennent aucun contenu interrogeable et n'expliquent pas pourquoi quelqu'un devrait "essayer ceci". Nous faisons un effort pour être une ressource pour la connaissance.



0
votes

1-Ajouter ce code à Webconfig CODE>

public async Task<ActionResult> ShowUsers(int Page = 0)
{
    string UserName= User.Identity.Name;
    return View(await user.GetAllUser(Page));
}


0 commentaires