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 Réponses :
Vous devez implémenter l'utilisateur de membre personnalisé. Voici un exemple de mise en œuvre: p>
Regardez également ce fil: P>
Pouvez-vous me suggérer où je peux mettre mon prénom ProP dans le code ci-dessus?
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. P>
Jetez un coup d'œil à cet article SQLite 3.0 Adhésion et fournisseur de rôle pour ASP.NET 2.0 p>
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. P>
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. P>
blockQuote>
Référence: Examiner l'adhésion, les rôles et le profil de ASP.NET - Part 6 A > p>
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.
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...
}
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>
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); }
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.