Copied to clipboard

Flag this post as spam?

This post will be reported to the moderators as potential spam to be looked at


  • Bo Jacobsen 148 posts 836 karma points
    6 days ago
    Bo Jacobsen
    0

    Custom Membership Provider that use Umbraco roles.

    Hey Everyone.

    Using Umbraco Version 7.10.4

    I am a bit stuck, and need some help.

    How do i create a Custom Membership provider that uses Umbraco MemberRoles? What i want is that i authendicate against another database, but want to be able to set and use the MemberRoles from the backoffice.

    Is that possible?

    What i am trying to do is this. the question is if i have to implement IPrincipal and/or Umbraco.Web.Security.Providers.MembersRoleProvider too? Or if we simply can add a role somewhere here, like i tried too with userData?

    public class CustomMembershipProvider : Umbraco.Web.Security.Providers.MembersMembershipProvider
    {
        public override bool ValidateUser(string username, string password)
        {
            /*
                * Custom code for Authenticate user
                */
    
            if (true)
            {
                var roles = new string[] { "A", "B" };
    
                var userData = JsonConvert.SerializeObject(roles);
    
                var ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddYears(1), true, userData);
    
                var encryptedTicket = FormsAuthentication.Encrypt(ticket);
    
                FormsAuthentication.SetAuthCookie(username, true);
    
                return true;
            }
    
        }
    }
    
  • Mike Chambers 593 posts 1096 karma points c-trib
    6 days ago
  • Bo Jacobsen 148 posts 836 karma points
    5 days ago
    Bo Jacobsen
    100

    Thanks Mike.

    We got it working. So we can log in and set FormsAuthenticationTicket with userdata as roles.

    Code to set FormsAuthenticationTicket after succesfull custom login.

    var roles = new string[] { "A", "B" };
    
    var userData = JsonConvert.SerializeObject(roles);
    
    var ticket = new FormsAuthenticationTicket(1, username, DateTime.Now, DateTime.Now.AddYears(1), true, userData);
    
    var encryptedTicket = FormsAuthentication.Encrypt(ticket);
    
    FormsAuthentication.SetAuthCookie(username, true);   
    

    MembersRoleProvider

    public class CustomRoleProvider : MembersRoleProvider
    {
        public override string[] GetRolesForUser(string username)
        {
            var authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {
                var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
                if (authTicket != null)
                {
                    var userData = ((FormsIdentity)HttpContext.Current.User.Identity).Ticket.UserData;
                    var userInfo = (string[])JsonConvert.DeserializeObject(userData, typeof(string[]));
    
                    return userInfo;
                }
            }
    
            return new string[0];
        }
    
        public override bool IsUserInRole(string username, string roleName)
        {
            var userRoles = GetRolesForUser(username);
            return userRoles.Contains(roleName);
        }
    }
    
Please Sign in or register to post replies

Write your reply to:

Draft