diff --git a/src/Umbraco.Core/Services/IMemberService.cs b/src/Umbraco.Core/Services/IMemberService.cs index 8894c419fc..cc8e665eb0 100644 --- a/src/Umbraco.Core/Services/IMemberService.cs +++ b/src/Umbraco.Core/Services/IMemberService.cs @@ -9,6 +9,13 @@ namespace Umbraco.Core.Services /// internal interface IMemberService : IMembershipMemberService { + /// + /// Checks if a member with the id exists + /// + /// + /// + bool Exists(int id); + IMember GetById(int id); IMember GetByKey(Guid id); IEnumerable GetMembersByMemberType(string memberTypeAlias); diff --git a/src/Umbraco.Core/Services/MemberService.cs b/src/Umbraco.Core/Services/MemberService.cs index 87eee84863..5c9f77a3fd 100644 --- a/src/Umbraco.Core/Services/MemberService.cs +++ b/src/Umbraco.Core/Services/MemberService.cs @@ -35,6 +35,19 @@ namespace Umbraco.Core.Services #region IMemberService Implementation + /// + /// Checks if a member with the id exists + /// + /// + /// + public bool Exists(int id) + { + using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) + { + return repository.Exists(id); + } + } + /// /// Gets a Member by its integer Id /// @@ -43,7 +56,7 @@ namespace Umbraco.Core.Services public IMember GetById(int id) { using (var repository = _repositoryFactory.CreateMemberRepository(_uowProvider.GetUnitOfWork())) - { + { return repository.Get(id); } } diff --git a/src/umbraco.cms/businesslogic/member/Member.cs b/src/umbraco.cms/businesslogic/member/Member.cs index 3a2389d35b..73ec6ce170 100644 --- a/src/umbraco.cms/businesslogic/member/Member.cs +++ b/src/umbraco.cms/businesslogic/member/Member.cs @@ -8,6 +8,7 @@ using System.Web; using System.Xml; using Umbraco.Core; using Umbraco.Core.Cache; +using Umbraco.Core.Logging; using Umbraco.Core.Models.Rdbms; using umbraco.cms.businesslogic.cache; using umbraco.BusinessLogic; @@ -34,11 +35,9 @@ namespace umbraco.cms.businesslogic.member public static readonly string UmbracoRoleProviderName = Constants.Conventions.Member.UmbracoRoleProviderName; public static readonly Guid _objectType = new Guid(Constants.ObjectTypes.Member); - private static readonly object m_Locker = new object(); - // zb-00004 #29956 : refactor cookies names & handling - private const string m_SQLOptimizedMany = @" + private const string _sQLOptimizedMany = @" select umbracoNode.id, umbracoNode.uniqueId, umbracoNode.level, umbracoNode.parentId, umbracoNode.path, umbracoNode.sortOrder, umbracoNode.createDate, @@ -53,11 +52,11 @@ namespace umbraco.cms.businesslogic.member #endregion #region Private members - private string m_Text; - private string m_Email; - private string m_Password; - private string m_LoginName; - private Hashtable m_Groups = null; + private string _text; + private string _email; + private string _password; + private string _loginName; + private Hashtable _groups = null; #endregion #region Constructors @@ -103,13 +102,13 @@ namespace umbraco.cms.businesslogic.member public static IEnumerable GetAllAsList() { var tmp = new List(); - using (IRecordsReader dr = SqlHelper.ExecuteReader( - string.Format(m_SQLOptimizedMany.Trim(), "1=1", "umbracoNode.text"), + using (var dr = SqlHelper.ExecuteReader( + string.Format(_sQLOptimizedMany.Trim(), "1=1", "umbracoNode.text"), SqlHelper.CreateParameter("@nodeObjectType", Member._objectType))) { while (dr.Read()) { - Member m = new Member(dr.GetInt("id"), true); + var m = new Member(dr.GetInt("id"), true); m.PopulateMemberFromReader(dr); tmp.Add(m); } @@ -126,13 +125,13 @@ namespace umbraco.cms.businesslogic.member { var tmp = new List(); - using (IRecordsReader dr = SqlHelper.ExecuteReader( - string.Format(m_SQLOptimizedMany.Trim(), "LOWER(SUBSTRING(text, 1, 1)) NOT IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')", "umbracoNode.text"), + using (var dr = SqlHelper.ExecuteReader( + string.Format(_sQLOptimizedMany.Trim(), "LOWER(SUBSTRING(text, 1, 1)) NOT IN ('a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z')", "umbracoNode.text"), SqlHelper.CreateParameter("@nodeObjectType", Member._objectType))) { while (dr.Read()) { - Member m = new Member(dr.GetInt("id"), true); + var m = new Member(dr.GetInt("id"), true); m.PopulateMemberFromReader(dr); tmp.Add(m); } @@ -156,8 +155,8 @@ namespace umbraco.cms.businesslogic.member string field = matchByNameInsteadOfLogin ? "umbracoNode.text" : "cmsMember.loginName"; var tmp = new List(); - using (IRecordsReader dr = SqlHelper.ExecuteReader( - string.Format(m_SQLOptimizedMany.Trim(), + using (var dr = SqlHelper.ExecuteReader( + string.Format(_sQLOptimizedMany.Trim(), string.Format("{0} like @letter", field), "umbracoNode.text"), SqlHelper.CreateParameter("@nodeObjectType", Member._objectType), @@ -165,7 +164,7 @@ namespace umbraco.cms.businesslogic.member { while (dr.Read()) { - Member m = new Member(dr.GetInt("id"), true); + var m = new Member(dr.GetInt("id"), true); m.PopulateMemberFromReader(dr); tmp.Add(m); } @@ -219,20 +218,20 @@ namespace umbraco.cms.businesslogic.member throw new ArgumentException("The loginname must be different from an empty string", "loginName"); // Test for e-mail - if (Email != "" && Member.GetMemberFromEmail(Email) != null && Membership.Providers[UmbracoMemberProviderName].RequiresUniqueEmail) + if (Email != "" && GetMemberFromEmail(Email) != null && Membership.Providers[UmbracoMemberProviderName].RequiresUniqueEmail) throw new Exception(String.Format("Duplicate Email! A member with the e-mail {0} already exists", Email)); - else if (Member.GetMemberFromLoginName(loginName) != null) + else if (GetMemberFromLoginName(loginName) != null) throw new Exception(String.Format("Duplicate User name! A member with the user name {0} already exists", loginName)); // Lowercased to prevent duplicates Email = Email.ToLower(); - Guid newId = Guid.NewGuid(); + var newId = Guid.NewGuid(); //create the cms node first - CMSNode newNode = MakeNew(-1, _objectType, u.Id, 1, Name, newId); + var newNode = MakeNew(-1, _objectType, u.Id, 1, Name, newId); //we need to create an empty member and set the underlying text property - Member tmp = new Member(newId, true); + var tmp = new Member(newId, true); tmp.SetText(Name); //create the content data for the new member @@ -246,9 +245,9 @@ namespace umbraco.cms.businesslogic.member SqlHelper.CreateParameter("@email", Email)); //read the whole object from the db - Member m = new Member(newId); + var m = new Member(newId); - NewEventArgs e = new NewEventArgs(); + var e = new NewEventArgs(); m.OnNew(e); @@ -270,7 +269,7 @@ namespace umbraco.cms.businesslogic.member throw new ArgumentException("The username of a Member must be different from an emptry string", "loginName"); if (IsMember(loginName)) { - object o = SqlHelper.ExecuteScalar( + var o = SqlHelper.ExecuteScalar( "select nodeID from cmsMember where LoginName = @loginName", SqlHelper.CreateParameter("@loginName", loginName)); @@ -301,7 +300,7 @@ namespace umbraco.cms.businesslogic.member if (string.IsNullOrEmpty(email)) return null; - object o = SqlHelper.ExecuteScalar( + var o = SqlHelper.ExecuteScalar( "select nodeID from cmsMember where Email = @email", SqlHelper.CreateParameter("@email", email.ToLower())); @@ -328,7 +327,7 @@ namespace umbraco.cms.businesslogic.member return null; var tmp = new List(); - using (IRecordsReader dr = SqlHelper.ExecuteReader(string.Format(m_SQLOptimizedMany.Trim(), + using (var dr = SqlHelper.ExecuteReader(string.Format(_sQLOptimizedMany.Trim(), "Email = @email", "umbracoNode.text"), SqlHelper.CreateParameter("@nodeObjectType", Member._objectType), @@ -336,7 +335,7 @@ namespace umbraco.cms.businesslogic.member { while (dr.Read()) { - Member m = new Member(dr.GetInt("id"), true); + var m = new Member(dr.GetInt("id"), true); m.PopulateMemberFromReader(dr); tmp.Add(m); } @@ -378,7 +377,7 @@ namespace umbraco.cms.businesslogic.member public static Member GetMemberFromLoginAndEncodedPassword(string loginName, string password) { - object o = SqlHelper.ExecuteScalar( + var o = SqlHelper.ExecuteScalar( "select nodeID from cmsMember where LoginName = @loginName and Password = @password", SqlHelper.CreateParameter("loginName", loginName), SqlHelper.CreateParameter("password", password)); @@ -411,16 +410,8 @@ namespace umbraco.cms.businesslogic.member /// True if the member exists public static bool IsMember(string loginName) { - Debug.Assert(loginName != null, "loginName cannot be null"); - object o = SqlHelper.ExecuteScalar( - "select count(nodeID) as tmp from cmsMember where LoginName = @loginName", - SqlHelper.CreateParameter("@loginName", loginName)); - if (o == null) - return false; - int count; - if (!int.TryParse(o.ToString(), out count)) - return false; - return count > 0; + Mandate.ParameterNotNullOrEmpty(loginName, "loginName"); + return ApplicationContext.Current.Services.MemberService.GetByUsername(loginName) != null; } /// @@ -434,12 +425,12 @@ namespace umbraco.cms.businesslogic.member public static void DeleteFromType(MemberType dt) { var objs = getContentOfContentType(dt); - foreach (Content c in objs) + foreach (var c in objs) { // due to recursive structure document might already been deleted.. if (IsNode(c.UniqueId)) { - Member tmp = new Member(c.UniqueId); + var tmp = new Member(c.UniqueId); tmp.delete(); } } @@ -456,17 +447,17 @@ namespace umbraco.cms.businesslogic.member { get { - if (string.IsNullOrEmpty(m_Text)) + if (string.IsNullOrEmpty(_text)) { - m_Text = SqlHelper.ExecuteScalar( + _text = SqlHelper.ExecuteScalar( "select text from umbracoNode where id = @id", SqlHelper.CreateParameter("@id", Id)); } - return m_Text; + return _text; } set { - m_Text = value; + _text = value; base.Text = value; } } @@ -478,13 +469,13 @@ namespace umbraco.cms.businesslogic.member { get { - if (string.IsNullOrEmpty(m_Password)) + if (string.IsNullOrEmpty(_password)) { - m_Password = SqlHelper.ExecuteScalar( + _password = SqlHelper.ExecuteScalar( "select Password from cmsMember where nodeId = @id", SqlHelper.CreateParameter("@id", Id)); } - return m_Password; + return _password; } set @@ -492,7 +483,7 @@ namespace umbraco.cms.businesslogic.member // We need to use the provider for this in order for hashing, etc. support // To write directly to the db use the ChangePassword method // this is not pretty but nessecary due to a design flaw (the membership provider should have been a part of the cms project) - MemberShipHelper helper = new MemberShipHelper(); + var helper = new MemberShipHelper(); ChangePassword(helper.EncodePassword(value, Membership.Provider.PasswordFormat)); } } @@ -504,13 +495,13 @@ namespace umbraco.cms.businesslogic.member { get { - if (string.IsNullOrEmpty(m_LoginName)) + if (string.IsNullOrEmpty(_loginName)) { - m_LoginName = SqlHelper.ExecuteScalar( + _loginName = SqlHelper.ExecuteScalar( "select LoginName from cmsMember where nodeId = @id", SqlHelper.CreateParameter("@id", Id)); } - return m_LoginName; + return _loginName; } set { @@ -522,7 +513,7 @@ namespace umbraco.cms.businesslogic.member "update cmsMember set LoginName = @loginName where nodeId = @id", SqlHelper.CreateParameter("@loginName", value), SqlHelper.CreateParameter("@id", Id)); - m_LoginName = value; + _loginName = value; } } @@ -533,9 +524,9 @@ namespace umbraco.cms.businesslogic.member { get { - if (m_Groups == null) + if (_groups == null) PopulateGroups(); - return m_Groups; + return _groups; } } @@ -546,14 +537,14 @@ namespace umbraco.cms.businesslogic.member { get { - if (String.IsNullOrEmpty(m_Email)) + if (String.IsNullOrEmpty(_email)) { - m_Email = SqlHelper.ExecuteScalar( + _email = SqlHelper.ExecuteScalar( "select Email from cmsMember where nodeId = @id", SqlHelper.CreateParameter("@id", Id)); } - return string.IsNullOrWhiteSpace(m_Email) ? m_Email : m_Email.ToLower(); + return string.IsNullOrWhiteSpace(_email) ? _email : _email.ToLower(); } set { @@ -578,7 +569,7 @@ namespace umbraco.cms.businesslogic.member "update cmsMember set Email = @email where nodeId = @id", SqlHelper.CreateParameter("@id", Id), SqlHelper.CreateParameter("@email", newEmail)); // Set the backing field to new value - m_Email = newEmail; + _email = newEmail; } } #endregion @@ -589,16 +580,16 @@ namespace umbraco.cms.businesslogic.member { base.setupNode(); - using (IRecordsReader dr = SqlHelper.ExecuteReader( + using (var dr = SqlHelper.ExecuteReader( @"SELECT Email, LoginName, Password FROM cmsMember WHERE nodeId=@nodeId", SqlHelper.CreateParameter("@nodeId", this.Id))) { if (dr.Read()) { if (!dr.IsNull("Email")) - m_Email = dr.GetString("Email"); - m_LoginName = dr.GetString("LoginName"); - m_Password = dr.GetString("Password"); + _email = dr.GetString("Email"); + _loginName = dr.GetString("LoginName"); + _password = dr.GetString("Password"); } else { @@ -612,7 +603,7 @@ namespace umbraco.cms.businesslogic.member /// public override void Save() { - SaveEventArgs e = new SaveEventArgs(); + var e = new SaveEventArgs(); FireBeforeSave(e); if (!e.Cancel) @@ -679,7 +670,7 @@ namespace umbraco.cms.businesslogic.member } // re-generate xml - XmlDocument xd = new XmlDocument(); + var xd = new XmlDocument(); XmlGenerate(xd); // generate preview for blame history? @@ -701,7 +692,7 @@ namespace umbraco.cms.businesslogic.member /// A the xmlrepresentation of the current member public override XmlNode ToXml(XmlDocument xd, bool Deep) { - XmlNode x = base.ToXml(xd, Deep); + var x = base.ToXml(xd, Deep); if (x.Attributes["loginName"] == null) { x.Attributes.Append(xmlHelper.addAttribute(xd, "loginName", LoginName)); @@ -715,7 +706,7 @@ namespace umbraco.cms.businesslogic.member /// public override void delete() { - DeleteEventArgs e = new DeleteEventArgs(); + var e = new DeleteEventArgs(); FireBeforeDelete(e); if (!e.Cancel) @@ -745,7 +736,22 @@ namespace umbraco.cms.businesslogic.member SqlHelper.CreateParameter("@id", Id)); //update this object's password - m_Password = newPassword; + _password = newPassword; + } + + /// + /// Returns the currently stored password - this may be encrypted or hashed string depending on the active membership provider + /// + /// + public string GetPassword() + { + if (string.IsNullOrEmpty(_password)) + { + _password = SqlHelper.ExecuteScalar( + "select Password from cmsMember where nodeId = @id", + SqlHelper.CreateParameter("@id", Id)); + } + return _password; } /// @@ -755,13 +761,13 @@ namespace umbraco.cms.businesslogic.member [MethodImpl(MethodImplOptions.Synchronized)] public void AddGroup(int GroupId) { - AddGroupEventArgs e = new AddGroupEventArgs(); + var e = new AddGroupEventArgs(); e.GroupId = GroupId; FireBeforeAddGroup(e); if (!e.Cancel) { - IParameter[] parameters = new IParameter[] { SqlHelper.CreateParameter("@id", Id), + var parameters = new IParameter[] { SqlHelper.CreateParameter("@id", Id), SqlHelper.CreateParameter("@groupId", GroupId) }; bool exists = SqlHelper.ExecuteScalar("SELECT COUNT(member) FROM cmsMember2MemberGroup WHERE member = @id AND memberGroup = @groupId", parameters) > 0; @@ -780,7 +786,7 @@ namespace umbraco.cms.businesslogic.member /// The MemberGroup from which the Member is removed public void RemoveGroup(int GroupId) { - RemoveGroupEventArgs e = new RemoveGroupEventArgs(); + var e = new RemoveGroupEventArgs(); e.GroupId = GroupId; FireBeforeRemoveGroup(e); @@ -817,9 +823,9 @@ namespace umbraco.cms.businesslogic.member dr.GetDateTime("createDate"), false); if (!dr.IsNull("Email")) - m_Email = dr.GetString("Email"); - m_LoginName = dr.GetString("LoginName"); - m_Password = dr.GetString("Password"); + _email = dr.GetString("Email"); + _loginName = dr.GetString("LoginName"); + _password = dr.GetString("Password"); } @@ -838,7 +844,7 @@ namespace umbraco.cms.businesslogic.member temp.Add(dr.GetInt("memberGroup"), new MemberGroup(dr.GetInt("memberGroup"))); } - m_Groups = temp; + _groups = temp; } private static string GetCacheKey(int id) @@ -846,55 +852,6 @@ namespace umbraco.cms.businesslogic.member return string.Format("{0}{1}", CacheKeys.MemberBusinessLogicCacheKey, id); } - // zb-00035 #29931 : helper class to handle member state - class MemberState - { - public int MemberId { get; set; } - public Guid MemberGuid { get; set; } - public string MemberLogin { get; set; } - - public MemberState(int memberId, Guid memberGuid, string memberLogin) - { - MemberId = memberId; - MemberGuid = memberGuid; - MemberLogin = memberLogin; - } - } - - // zb-00035 #29931 : helper methods to handle member state - - [Obsolete("Only use .NET Membership APIs to handle state now", true)] - static void SetMemberState(Member member) - { - SetMemberState(member.Id, member.UniqueId, member.LoginName); - } - - [Obsolete("Only use .NET Membership APIs to handle state now", true)] - static void SetMemberState(int memberId, Guid memberGuid, string memberLogin) - { - string value = string.Format("{0}+{1}+{2}", memberId, memberGuid, memberLogin); - // zb-00004 #29956 : refactor cookies names & handling - StateHelper.Cookies.Member.SetValue(value); - } - - [Obsolete("Only use .NET Membership APIs to handle state now", true)] - static void SetMemberState(Member member, bool useSession, double cookieDays) - { - SetMemberState(member.Id, member.UniqueId, member.LoginName, useSession, cookieDays); - } - - [Obsolete("Only use .NET Membership APIs to handle state now", true)] - static void SetMemberState(int memberId, Guid memberGuid, string memberLogin, bool useSession, double cookieDays) - { - string value = string.Format("{0}+{1}+{2}", memberId, memberGuid, memberLogin); - - // zb-00004 #29956 : refactor cookies names & handling - if (useSession) - HttpContext.Current.Session[StateHelper.Cookies.Member.Key] = value; - else - StateHelper.Cookies.Member.SetValue(value, cookieDays); - } - [Obsolete("Only use .NET Membership APIs to handle state now", true)] static void ClearMemberState() { @@ -903,87 +860,6 @@ namespace umbraco.cms.businesslogic.member FormsAuthentication.SignOut(); } - [Obsolete("Only use .NET Membership APIs to handle state now", true)] - static MemberState GetMemberState() - { - // NH: Refactor to fix issue 30171, where auth using pure .NET Members doesn't clear old Umbraco cookie, thus this method gets the previous - // umbraco user instead of the new one - // zb-00004 #29956 : refactor cookies names & handling + bring session-related stuff here - string value = null; - if (StateHelper.Cookies.Member.HasValue) - { - value = StateHelper.Cookies.Member.GetValue(); - if (!String.IsNullOrEmpty(value)) - { - string validateMemberId = value.Substring(0, value.IndexOf("+")); - if (Membership.GetUser() == null || validateMemberId != Membership.GetUser().ProviderUserKey.ToString()) - { - Member.RemoveMemberFromCache(int.Parse(validateMemberId)); - value = String.Empty; - } - } - } - - // compatibility with .NET Memberships - if (String.IsNullOrEmpty(value) && HttpContext.Current.User.Identity.IsAuthenticated) - { - int _currentMemberId = 0; - if (int.TryParse(Membership.GetUser().ProviderUserKey.ToString(), out _currentMemberId)) - { - if (memberExists(_currentMemberId)) - { - // current member is always in the cache, else add it! - Member m = GetMemberFromCache(_currentMemberId); - if (m == null) - { - m = new Member(_currentMemberId); - AddMemberToCache(m); - } - return new MemberState(m.Id, m.UniqueId, m.LoginName); - } - } - } - else - { - var context = HttpContext.Current; - if (context != null && context.Session != null && context.Session[StateHelper.Cookies.Member.Key] != null) - { - string v = context.Session[StateHelper.Cookies.Member.Key].ToString(); - if (v != "0") - value = v; - } - } - - if (value == null) - return null; - - // #30350 - do not use Split as memberLogin could contain '+' - int pos1 = value.IndexOf('+'); - if (pos1 < 0) - return null; - int pos2 = value.IndexOf('+', pos1 + 1); - if (pos2 < 0) - return null; - - int memberId; - if (!Int32.TryParse(value.Substring(0, pos1), out memberId)) - return null; - Guid memberGuid; - try - { - // Guid.TryParse is in .NET 4 only - // using try...catch for .NET 3.5 compatibility - memberGuid = new Guid(value.Substring(pos1 + 1, pos2 - pos1 - 1)); - } - catch - { - return null; - } - - MemberState ms = new MemberState(memberId, memberGuid, value.Substring(pos2 + 1)); - return ms; - } - #endregion #region MemberHandle functions @@ -1003,7 +879,7 @@ namespace umbraco.cms.businesslogic.member if (m != null) { - AddToCacheEventArgs e = new AddToCacheEventArgs(); + var e = new AddToCacheEventArgs(); m.FireBeforeAddToCache(e); if (!e.Cancel) @@ -1221,11 +1097,11 @@ namespace umbraco.cms.businesslogic.member /// /// Make a lookup in the database to verify if a member truely exists /// - /// The node id of the member + /// The node id of the member /// True is a record exists in db - private static bool memberExists(int NodeId) + private static bool MemberExists(int nodeId) { - return SqlHelper.ExecuteScalar("select count(nodeId) from cmsMember where nodeId = @nodeId", SqlHelper.CreateParameter("@nodeId", NodeId)) == 1; + return ApplicationContext.Current.Services.MemberService.Exists(nodeId); } @@ -1235,32 +1111,15 @@ namespace umbraco.cms.businesslogic.member /// The current visitors members id, if the visitor is not logged in it returns 0 public static int CurrentMemberId() { - int _currentMemberId = 0; + int currentMemberId = 0; // For backwards compatibility between umbraco members and .net membership if (HttpContext.Current.User.Identity.IsAuthenticated) { - int.TryParse(Membership.GetUser().ProviderUserKey.ToString(), out _currentMemberId); + int.TryParse(Membership.GetUser().ProviderUserKey.ToString(), out currentMemberId); } - // NH 4.7.1: We'll no longer use legacy Umbraco cookies to handle members - /* - else - { - // zb-00035 #29931 : cleanup member state management - MemberState ms = GetMemberState(); - if (ms != null) - _currentMemberId = ms.MemberId; - } - - if (_currentMemberId > 0 && !memberExists(_currentMemberId)) - { - _currentMemberId = 0; - // zb-00035 #29931 : cleanup member state management - ClearMemberState(); - } - */ - return _currentMemberId; + return currentMemberId; } /// @@ -1273,28 +1132,17 @@ namespace umbraco.cms.businesslogic.member { if (HttpContext.Current.User.Identity.IsAuthenticated) { - // zb-00035 #29931 : cleanup member state management - /*MemberState ms = GetMemberState(); - - if (ms == null || ms.MemberId == 0) - return null; - - // return member from cache - Member member = GetMemberFromCache(ms.MemberId); - if (member == null) - member = new Member(ms.MemberId); - */ - - int _currentMemberId = 0; - if (int.TryParse(Membership.GetUser().ProviderUserKey.ToString(), out _currentMemberId)) + int currentMemberId = 0; + if (int.TryParse(Membership.GetUser().ProviderUserKey.ToString(), out currentMemberId)) { - Member m = new Member(_currentMemberId); + var m = new Member(currentMemberId); return m; } } } - catch + catch (Exception ex) { + LogHelper.Error("An error occurred in GetCurrentMember", ex); } return null; }