ASP.NET MVC3 et EF4.1 - Comment personnaliser des membres après l'exécution aspnet_regsql?

StackOverflow https://stackoverflow.com/questions/7338964

Question

Je dois mettre en œuvre dans mon application de réseau social une adhésion personnalisée et ajouter des informations aux tables de réSEAU régulières dans une base de données existante, comme pays, province, ville, date de naissance, etc, etc, etc.

Je l'ai déjà couru aspnet_regsql, basé sur ce message Ajouter des tables ASP.NET membres à ma propre base de données existante, ou dois-je configurer une base de données au lieu d'appartenance ASP.NET séparée et déjà essayé de suivre ce message http://msdn.microsoft.com/en-us/library/ms366730.aspx# Y342 mais j'ai eu quelques erreurs de compilation des méthodes outrepassée, et je voudrais actualy de trouver un exemple étape par étape à l'aide MVC 3 et EF4.1.

Quoi qu'il en soit, après l'exécution aspnet_regsql, ce qui serait l'étape suivante pour mettre en œuvre des méthodes d'adhésion personnalisées? Connaissez-vous étape par étape (facile) tutoriel pour me aider? Merci les gars!

Était-ce utile?

La solution 4

merci beaucoup pour toutes vos réponses, tous étaient utiles pour moi, j'ai trouvé ce lien qui m'a beaucoup aidé, d'ajouter des informations à vos réponses, je voudrais partager avec la communauté, peut-être qu'il peut aider quelqu'un autre:

http://www.java2s.com/Tutorial/ ASP.NET/0420__Authentication-Authorization/UsingASPNETMembership.htm

Autres conseils

Stockez vos données d'utilisateurs supplémentaires dans votre propre table des utilisateurs. Conservez tous les champs supplémentaires que vous souhaitez et inclure un champ qui vous permettra de relier le dos d'enregistrement à un utilisateur d'appartenance. Restez en dehors des tables d'adhésion et ne les accès par le fournisseur d'appartenances pour éviter de traiter tout changement Microsoft peut faire sous le capot à l'avenir.

Si vous voulez télécharger un code pour voir comment faire est vous pouvez prendre nerdinner: http: //nerddinner.codeplex. com /

Tout d'abord vous devez avoir pour être sûr que vous êtes la configuration web.config est ok

<connectionStrings>
     <add name="XXXXXMembership" connectionString="data source=.\SQLEXPRESS;Initial Catalog=corpiq_membership;User Id=corpiq; Password=c0rp1q; Persist Security Info=true;" providerName="System.Data.SqlClient" />
     <add name="CorpiqDb" connectionString="data source=.\SQLEXPRESS;Initial Catalog=corpiq;User Id=corpiq; Password=c0rp1q; Persist Security Info=true;" providerName="System.Data.SqlClient" />
  </connectionStrings>

<membership>
      <providers>
        <clear/>
        <add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="XXXXXMembership"
             enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="true"
             maxInvalidPasswordAttempts="3" minRequiredPasswordLength="8" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="30"
             passwordStrengthRegularExpression="^.*(?=.{8,})(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).*$" passwordFormat="Hashed" applicationName="/" />
      </providers>
    </membership>

Si tout est ok, vous devriez être en mesure de lancer l'outil de configuration ASP.Net, sorcière est e marteau (en rouge) et la planète au-dessus de l'explorateur de solution lorsque vous êtes sur le site MVC. Avec les outils que vous pouvez ajouter un utilisateur et les rôles.

Une fois que vous devriez être en mesure d'ajouter simplement cette ligne dans votre contrôleur:

[Authorize(Roles = "Member, Delegate")]

Et je suggère d'écrire un wrapper cette méthode d'adhésion d'appel afin que vous puissiez avoir vous êtes propre logique, ici est le mien:

public class AuthenticationService : IAuthenticationService
    {

        public bool IsValidLogin(string email, string password)
        {
            //Unlock user if it makes more than 30 minutes
            CheckLocked(email);
            return Membership.ValidateUser(email, password);
        }

        public void SignIn(string email, bool createPersistentCookie)
        {
            if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email");
            FormsAuthentication.SetAuthCookie(email, createPersistentCookie);
        }

        public void SignOut()
        {
            FormsAuthentication.SignOut();
        }

        public string GetLoggedInUserName()
        {
            return Membership.GetUser() != null ? Membership.GetUser().UserName : string.Empty;
        }

        public MembershipCreateStatus RegisterUser(string email, string password, string role)
        {
            MembershipCreateStatus status;
            Membership.CreateUser(email, password, email, Guid.NewGuid().ToString(), Guid.NewGuid().ToString(), true, out status);

            if (status == MembershipCreateStatus.Success)
            {
                Roles.AddUserToRole(email, role);
            }
            return status;
        }

        public MembershipUserCollection GetAllUsers()
        {
            return Membership.GetAllUsers();
        }

        public string GeneratePassword()
        {
            var alphaCaps = "QWERTYUIOPASDFGHJKLZXCVBNM";
            var alphaLow = "qwertyuiopasdfghjklzxcvbnm";
            var numerics = "1234567890";
            var special = "@#$";
            var allChars = alphaCaps + alphaLow + numerics + special;
            var r = new Random();
            var generatedPassword = "";
            for (int i = 0; i < MinPasswordLength - 1; i++)
            {
                double rand = r.NextDouble();
                if (i == 0)
                {
                    //First character is an upper case alphabet
                    generatedPassword += alphaCaps.ToCharArray()[(int)Math.Floor(rand * alphaCaps.Length)];
                    //Next one is numeric
                    rand = r.NextDouble();
                    generatedPassword += numerics.ToCharArray()[(int) Math.Floor(rand*numerics.Length)];
                }
                else
                {
                    generatedPassword += allChars.ToCharArray()[(int)Math.Floor(rand * allChars.Length)];
                }
            }
            return generatedPassword;
        }

        public int MinPasswordLength
        {
            get
            {
                return Membership.Provider.MinRequiredPasswordLength;
            }
        }

        public string AdminRole
        {
            get { return "admin"; }
        }

        public string MemberRole
        {
            get { return "member"; }
        }

        public string DelegateRole
        {
            get { return "delegate"; }
        }

        public bool Delete(string email)
        {
            return Membership.DeleteUser(email);
        }

        public bool IsAdmin()
        {
            return Roles.IsUserInRole(AdminRole);
        }

        public bool IsMember()
        {
            return Roles.IsUserInRole(MemberRole);
        }

        public bool IsDelegate()
        {
            return Roles.IsUserInRole(DelegateRole);
        }

        public bool ChangePassword(string email, string oldPassword, string newPassword)
        {
            if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email");
            if (String.IsNullOrEmpty(oldPassword)) throw new ArgumentException("Value cannot be null or empty.", "oldPassword");
            if (String.IsNullOrEmpty(newPassword)) throw new ArgumentException("Value cannot be null or empty.", "newPassword");

            // The underlying ChangePassword() will throw an exception rather
            // than return false in certain failure scenarios.
            try
            {
                var currentUser = Membership.Provider.GetUser(email, true);
                return currentUser.ChangePassword(oldPassword, newPassword);
            }
            catch (ArgumentException)
            {
                return false;
            }
            catch (MembershipPasswordException)
            {
                return false;
            }
        }

        public string ResetPassword(string email)
        {
            if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email");
            var currentUser = Membership.Provider.GetUser(email, false);
            return currentUser.ResetPassword();
        }

        public bool CheckLocked(string email)
        {
            if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email");
            var currentUser = Membership.Provider.GetUser(email, false);
            if (currentUser == null) return false;
            if (!currentUser.IsLockedOut) return false;
            if (currentUser.LastLockoutDate.AddMinutes(30) < DateTime.Now)
            {
                currentUser.UnlockUser();
                return false;
            }
            return true;
        }

        public bool Unlock(string email)
        {
            if (String.IsNullOrEmpty(email)) throw new ArgumentException("Value cannot be null or empty.", "email");
            var currentUser = Membership.Provider.GetUser(email, false);
            if (currentUser == null) return false;
            currentUser.UnlockUser();
            return true;
        }

        public void CheckRoles()
        {
            if (!Roles.RoleExists(MemberRole)) Roles.CreateRole(MemberRole);
            if (!Roles.RoleExists(AdminRole)) Roles.CreateRole(AdminRole);
            if (!Roles.RoleExists(DelegateRole)) Roles.CreateRole(DelegateRole);
        }
}

Je ne suis pas tout à fait partie de sorcière que vous ne comprenez pas, mais laissez-nous savoir dans les détails quels sont vos problèmes et nous pourrions peut-être aider plus! Je pense que vous avez besoin pour obtenir le code du bâtiment que vous êtes d'abord.

Et voici un bon début pour EF (vous pouvez écrire vous êtes profil / utilisateur personnalisé dans la base de données que vous êtes propre): http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code -Premier-avec-un-existant-database.aspx

Vous ne mettez pas ce genre de chose dans l'adhésion. Vous le mettre dans Profils , ou votre propre base de données.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top