public void Login(User user)
        {
            var claims = new List<Claim>(new[]
            {
                new Claim(ClaimTypes.NameIdentifier, user.Username),
                new Claim(ClaimTypes.Name, user.Name)
            });

            if (!string.IsNullOrWhiteSpace(user.Email))
            {
                claims.Add(new Claim(ClaimTypes.Email, user.Email));
            }

            claims.AddRange(user.Roles.Select(role => new Claim(ClaimTypes.Role, role.Name)));

            var identity = new ClaimsIdentity(claims, "Forms");
            var principal = new ClaimsPrincipal(identity);

            var sessionToken = new SessionSecurityToken(principal);
            var authenticationModule = FederatedAuthentication.SessionAuthenticationModule;

            // Persist the authentication cookie.
            authenticationModule.WriteSessionTokenToCookie(sessionToken);

            // Set the current user for the current request
            Thread.CurrentPrincipal = principal;
        }
        public void AddUserToRoles(User user, params string[] rolesToAddTo)
        {
            var session = sessionCallback();

            foreach (var roleToAddTo in rolesToAddTo)
            {
                var role = session.QueryOver<Role>().Where(r => r.Name == roleToAddTo).SingleOrDefault();
                role.Users.Add(user);
                user.Roles.Add(role);
                session.SaveOrUpdate(role);
            }
        }
        public User CreateAccount(string name, string email, string username, string password)
        {
            var user = new User
                           {
                               Name = name,
                               Email = email,
                               Password = HashPassword(password),
                               Username = username
                           };

            DependencyResolver.Current.GetService<ISession>().Save(user);
            return user;
        }
        public void AddUserToRoles(User user, params Claim[] rolesToAdd)
        {
            var session = sessionCallback();

            foreach (var roleToAddTo in rolesToAdd)
            {
                Claim roleClaim = roleToAddTo;
                var role = session.QueryOver<Model.Authentication.Role>().Where(r => r.Name == roleClaim.Value).SingleOrDefault();
                role.Users.Add(user);
                user.Roles.Add(role);
                session.SaveOrUpdate(role);
            }
        }