7
votes

Comment ajouter plus de champs personnalisés à l'aide de membres personnalisés en MVC?

J'ai remplacé les méthodes d'adhésion pour créer une adhésion personnalisée.

Dans le modèle de compte, j'ai remplacé la méthode CreateUser code>: p>

public override MembershipUser CreateUser(string username, string password,
    string email, string passwordQuestion, string passwordAnswer,
    bool isApproved, object providerUserKey, out MembershipCreateStatus status)
{
    ValidatePasswordEventArgs args = new ValidatePasswordEventArgs(
        username, password, true);
    OnValidatingPassword(args);

    if (args.Cancel)
    {
        status = MembershipCreateStatus.InvalidPassword;
        return null;
    }

    if (RequiresUniqueEmail && GetUserNameByEmail(email) != "")
    {
        status = MembershipCreateStatus.DuplicateEmail;
        return null;
    }

    MembershipUser u = GetUser(username, false);
    if (u == null)
    {
        UserRepository _user = new UserRepository();

        // Here I call my new method which has fields I've created in the
        // User table; I'm using entity framework.    
        _user.CreateUser(username, password, email);
        status = MembershipCreateStatus.Success;
        return GetUser(username, false);
    }
    else
    {
        status = MembershipCreateStatus.DuplicateUserName;
    }

    return null;
}

public MembershipUser CreateUser(string username, string password,
    string email)
{
    using (CustomMembershipDB db = new CustomMembershipDB())
    {
        User user = new User();
        user.UserName = username;
        user.Email = email;
        user.PasswordSalt = CreateSalt();
        user.Password = CreatePasswordHash(password, user.PasswordSalt);
        user.CreatedDate = DateTime.Now;
        user.IsActivated = false;
        user.IsLockedOut = false;
        user.LastLockedOutDate = DateTime.Now;
        user.LastLoginDate = DateTime.Now;

        //Generate an email key
        // user.NewEmailKey = GenerateKey();

        db.AddToUsers(user);
        db.SaveChanges();

        //send mail
        // SendMail(user);

        return GetUser(username);
    }
}


4 commentaires

Vous ne devriez vraiment pas essayer d'ajouter des champs à la classe des membres. Si vous souhaitez stocker prénom, Name, etc., le profil et le profilProvider ('' dans web.config) a été conçu pour cela.


Comment puis-je utiliser cela s'il vous plaît donnez-moi un lien?


Voici votre lien: Google.com?q=asp.net+Profile+Provider


Vous pouvez utiliser ProfileProvider dans MVC, comme vous pouvez utiliser MembershipProvider et RoleProvider. Les profils sont ASP.NET, pas des webforms.


4 Réponses :


5
votes

Vous devez implémenter l'utilisateur de membre personnalisé. Voici un exemple de mise en œuvre:


1 commentaires

Pouvez-vous me suggérer où je peux mettre mon prénom ProP dans le code ci-dessus?



0
votes

Faites une classe qui hérite de MembershipProvider et de mettre en œuvre des méthodes identiques en appelant simplement le SQLMembershipProvider, mais modifie d'autres personnes que vous souhaitez une fonctionnalité différente.

Jetez un coup d'œil à cet article SQLite 3.0 Adhésion et fournisseur de rôle pour ASP.NET 2.0

mise à jour:

Le système d'adhésion dans ASP.NET a été conçu pour créer une normalisée API pour travailler avec des comptes d'utilisateurs, une tâche confrontée par de nombreux web Applications (reportez-vous à la partie 1 de la présente série d'articles pour un plus regarder en profondeur de l'adhésion). Alors que le système d'adhésion englobe Propriétés liées à l'utilisateur de base - Nom d'utilisateur, mot de passe, adresse e-mail et Ainsi, des informations supplémentaires supplémentaires doivent être capturées pour chaque utilisateur. Malheureusement, ces informations supplémentaires peuvent différer sauvagement de l'application à l'application.

Au lieu d'ajouter des attributs d'utilisateur supplémentaires au système d'adhésion, Microsoft a plutôt créé le système de profil pour gérer un utilisateur supplémentaire. Propriétés. Le système de profil permet au supplément, spécifique à l'utilisateur Propriétés à définir dans le fichier web.config et est responsable de persister ces valeurs à certains magasins de données.

Référence: Examiner l'adhésion, les rôles et le profil de ASP.NET - Part 6


3 commentaires

Pouvez-vous me suggérer où je peux mettre mon prénom ProP dans le code ci-dessus?


@AssaThuppines Si vous lisez cet article, il vous indique le moyen plus facile d'étendre les fonctionnaires de l'adhésion ASP.NET.


Mais si vous voulez aller avec ce code, vous devez mettre à jour la ligne utilisateur après créée par le fournisseur d'adhésion en dehors de cette méthode.



0
votes

Voici comment j'ai accompli quelque chose comme ça. J'ai ajouté l'événement onecreDUser code> to CreateUserWizard et lorsque vous appuyez sur CRINATURERER CODE> BOUTON DE CHARGEMENT DE LA MÉTHODE

protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
    {
        MembershipUser mu = Membership.GetUser(CreateUserWizard1.UserName);
        int idOfInsertedUser = (int)mu.ProviderUserKey;

        TextBox tb1 = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("FirstName";
        string firstName= tb1.Text;
        TextBox tb2 = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("LastName";
        string lastName= tb2.Text;  

// now you have values of two more fields, and it is time to call your Database methods for inserting them in tables of choice...
    }


0 commentaires

1
votes

Vous pouvez laisser la table Aspnetusers intact et créer une nouvelle table pour stocker les informations supplémentaires (liées à l'original). De cette façon, vous ne casserez pas de code existant dans le fournisseur d'adhésion.

La table d'aspnettusers originale a: [ID], [Email], [EmailConfirmenté], [PasswordHash], [SecurityStamp], [Phonenumber], [PhonenumberConfirmé], [Twofactorenabled], [LockoutendDatetC], [LockOutenabled], [AccessFaillesDcount], [Nom d'utilisateur] P >

La nouvelle table pour stocker des données supplémentaires peut avoir par exemple: [ID], [UserID] [DateOfbirth], [Biographie], etc. Où [userid] est la clé étrangère de la table aspnettusers. P>

Un avantage de cette approche est que vous pouvez créer plusieurs types d'utilisateurs, chacun stockant ses informations associées dans une table différente, tandis que les données communes sont toujours Dans la table d'origine. P>

Comment: p>

  1. Mise à jour d'une première mise à jour Le registreViewModel pour contenir les données supplémentaires que vous souhaitez. LI>
  2. Mettez à jour la méthode de registre dans le contrôleur de compte, voici la méthode d'origine mise à jour avec le code pour insérer de nouvelles données de profil: p>

    [HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<ActionResult> Register(RegisterViewModel model)
    {
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser() { UserName = model.Email, Email = model.Email };
            IdentityResult result = await UserManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                // Start of new code ----------------------------------------
    
                // Get Id of newly inserted user
                int userId = user.Id; // Get Id of newly inserted user
    
                // Create a profile referencing the userId
                AddUserProfile(userId, model);
    
                // End of new code ----------------------------------------
    
                await SignInAsync(user, isPersistent: false);
                return RedirectToAction("Index", "Home");
            }
            else
            {
                AddErrors(result);
            }
        }
        return View(model);
    }
    
  3. Implémentez la méthode AdduserProfile (INT UserID, RegisterViewModel Model) Comme vous le souhaitez. Vous collecterez les données supplémentaires de l'objet modèle avec l'ID utilisateur et enregistrez le nouvel objet de profil dans la DB. Li> ol> p>


0 commentaires