I've developed membership systems on Umbraco 4.x websites before, using code like this:
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using umbraco.cms.businesslogic.datatype;
using umbraco.cms.businesslogic.web;
using umbraco.cms.businesslogic.member;
using umbraco.cms.businesslogic.property;
namespace DocumentMembership
{
public partial class Register : System.Web.UI.UserControl
{
protected void CreateUserWizard1_CreatedUser(object sender, EventArgs e)
{
// add member to role
Roles.AddUserToRole(this.CreateUserWizard1.UserName, "WebsiteUser");
// set member property
Member member = Member.GetMemberFromLoginName(this.CreateUserWizard1.UserName);
if (member != null)
{
Property FirstNameProperty = member.getProperty("firstName");
if (FirstNameProperty != null)
{
TextBox FirstNameTextBox = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("FirstName");
FirstNameProperty.Value = FirstNameTextBox.Text;
}
Property SurnameProperty = member.getProperty("surname");
if (SurnameProperty != null)
{
TextBox SurnameTextBox = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Surname");
SurnameProperty.Value = SurnameTextBox.Text;
}
Property EmailProperty = member.getProperty("email");
if (EmailProperty != null)
{
TextBox EmailTextBox = (TextBox)CreateUserWizard1.CreateUserStep.ContentTemplateContainer.FindControl("Email");
EmailProperty.Value = EmailTextBox.Text;
}
// Log user in automatically
FormsAuthentication.SetAuthCookie(this.CreateUserWizard1.UserName, true);
Response.Redirect("/registration-successful/");
}
}
}
}
Now I'm trying to do the same (essentially, create a member via a registration form, assign the member to a group and populate a couple of properties on the member type, such as 'firstName' and 'lastName') but on Umbraco 6.0.2.
In Umbraco 6(.0.2) it seems the umbraco membership methods like 'GetMemberFromLoginName' are obsolete. So instead I'm using the standard .NET membership provider, so I've created the member like this:
MembershipUser member = System.Web.Security.Membership.GetUser(this.CreateUserWizard1.UserName);
However, I'm not sure now how to assign the property values (firstName etc) to this member. I've Googled and I the examples I've found seem to assume more knowledge than I have. I've also read the umbraco WIKI article but I'm never quite sure if that stuff is up to date and it actually loses me around the 'creating profiles' part (is a profile just the name for a collection of Umbraco member properties, so I need to create a profile on my Umbraco member and then I can set the properties on this as they are in my Umbraco member type? Then I also need to add all of the properties from the member type to the web.config file?)
I know this stuff is probably second nature for a .NET dev, which is why it's largely assumed knowledge, but I'd really appreciate some practical pointers here to help me understand it a little more and help to populate my member with the full set of properties.
Thanks Tom. Aaron's article seems to be an extended version of the Wiki article, so it gives more background on it, which is useful. It does seem a bit odd having to delcare member properties in the web.config file, but at least I know that's the right way to do it and having tested just now, it works!
Hi you dont need to define in the web config and your code. Please see my blog post below. Might be a bit rough. Still finishing it, but should be correct. Charlie :)
In version 4 of Umbraco the membership model changed from Umbraco's to ASP.net's implementation. Something I have noticed being asked a lot on the Umbraco boards was how to access custom properties against members in code. A lot of the advice pointed towards one of two implementations. A web config implementation, which meant you have your properties defined in the web config as well as you code or a strongly typed implementation which meant no properties in the web config, but as you will see throws a error in some cases.
For this example we must assume that I have a member in Umbraco with:
//pass the current users user name as a parameter and setup a profile base
public static someclass GetProfile(string username)
{
(someclass)Create(usernName);
}
public string firstname
{
get
{
base[“FIRSTNAME”] = value
}
set
{
value = base[“FIRSTNAME”]
}
}
}
}
Now after much frustration and a lot of help, the conclusion was that Umbraco was doing some sort of case-insensitive match on the property alias. Thus if you have a property and alias of the same name it thinks there are two values because they have both been changed to lower case. So what you have to do is insure that the alias and name of your property(s) are not identical when they are both made lower case.
Create member with properties in Umbraco 6.x
Hi,
I've developed membership systems on Umbraco 4.x websites before, using code like this:
Now I'm trying to do the same (essentially, create a member via a registration form, assign the member to a group and populate a couple of properties on the member type, such as 'firstName' and 'lastName') but on Umbraco 6.0.2.
In Umbraco 6(.0.2) it seems the umbraco membership methods like 'GetMemberFromLoginName' are obsolete. So instead I'm using the standard .NET membership provider, so I've created the member like this:
However, I'm not sure now how to assign the property values (firstName etc) to this member. I've Googled and I the examples I've found seem to assume more knowledge than I have. I've also read the umbraco WIKI article but I'm never quite sure if that stuff is up to date and it actually loses me around the 'creating profiles' part (is a profile just the name for a collection of Umbraco member properties, so I need to create a profile on my Umbraco member and then I can set the properties on this as they are in my Umbraco member type? Then I also need to add all of the properties from the member type to the web.config file?)
I know this stuff is probably second nature for a .NET dev, which is why it's largely assumed knowledge, but I'd really appreciate some practical pointers here to help me understand it a little more and help to populate my member with the full set of properties.
Thanks for any pointers folks!
Hi Dan,
The way we usually do this is using a ProfileBase class. See this excellent explanation by Aaron (yes, it's from 2010 but still valid :) ): http://www.aaron-powell.com/umbraco-members-profiles
With this setup, we can do things like this after creating the member:
Tom
Thanks Tom. Aaron's article seems to be an extended version of the Wiki article, so it gives more background on it, which is useful. It does seem a bit odd having to delcare member properties in the web.config file, but at least I know that's the right way to do it and having tested just now, it works!
Thanks
Hi you dont need to define in the web config and your code. Please see my blog post below. Might be a bit rough. Still finishing it, but should be correct. Charlie :)
In version 4 of Umbraco the membership model changed from Umbraco's to ASP.net's implementation. Something I have noticed being asked a lot on the Umbraco boards was how to access custom properties against members in code. A lot of the advice pointed towards one of two implementations. A web config implementation, which meant you have your properties defined in the web config as well as you code or a strongly typed implementation which meant no properties in the web config, but as you will see throws a error in some cases.
For this example we must assume that I have a member in Umbraco with:
User name: [email protected]
Custom property name: FirstName
Custom property alias: firstname
Type: Textstring
WEB CONFIG IMPLEMENTATION : This means having properties defined in your web config and your code
<!--WEB CONFIG -->
<profile defaultProvider="UmbracoMemberProfileProvider" enabled="true">
<providers>
<clear/>
<add name="UmbracoMemberProfileProvider" type="umbraco.providers.members.UmbracoProfileProvider, umbraco.providers"/>
</providers>
<properties>
<add name="surname" allowAnonymous ="false" provider="UmbracoMemberProfileProvider" type="System.String" />
<clear/>
</properties>
<!-- END WEB CONFIG -->
Next we simply get or set the property's from or to our profile base within a model or class.
namespace somenamespace
{
public someclass : ProfileBase
{
public const FIRSTNAME = “firstname”;
//get the current user by their user name (Umbraco member)
public static someclass METHODNAME()
{
return(someclass)Create(Membership.GetUser().UserName);
}
//pass the current user's user name as a parameter and setup a profile base
public static someclass GetProfile(string username)
{
(someclass)Create(userName);
}
public string Somemethod(some parameters)
{
//Assign the value to the profile base
base[“FIRSTNAME”] = property;
//Or get the value from the profile base
property = base["FIRSTNAME"];
}
}
}
//END OF WEB CONFIG IMPLEMENTATION
STRONGLY TYPED IMPLEMENTATION : This means not having properties defined in your web config
Another implementation attempted is strongly typed access to the member properties.
//No properties defined in the web config
<!--WEB CONFIG -->
<profile defaultProvider="UmbracoMemberProfileProvider" enabled="true" inherits="BSD.PCSG.Configuration.MemberProfile">
<providers>
<clear/>
<add name="UmbracoMemberProfileProvider" type="umbraco.providers.members.UmbracoProfileProvider, umbraco.providers"/>
</providers>
<properties>
</properties>
</profile>
<!-- END WEB CONFIG -->
namespace somenamespace
{
public someclass : ProfileBase
{
public const FIRSTNAME = “firstname”;
//get the current users user name
public static someclass METHODNAME()
{
return(someclass)Create(Membership.GetUser().UserName);
}
//pass the current users user name as a parameter and setup a profile base
public static someclass GetProfile(string username)
{
(someclass)Create(usernName);
}
public string firstname
{
get
{
base[“FIRSTNAME”] = value
}
set
{
value = base[“FIRSTNAME”]
}
}
}
}
Now after much frustration and a lot of help, the conclusion was that Umbraco was doing some sort of case-insensitive match on the property alias. Thus if you have a property and alias of the same name it thinks there are two values because they have both been changed to lower case. So what you have to do is insure that the alias and name of your property(s) are not identical when they are both made lower case.
In our example we will changed the alias like so:
User name: [email protected]
Custom property name: FirstName
Custom property alias: _firstname
Type: Textstring
namespace somenamespace
{
public someclass : ProfileBase
{
public const FIRSTNAME = “_firstname”;
//get the current users user name
public static someclass METHODNAME()
{
return(someclass)Create(Membership.GetUser().UserName);
}
//pass the current users user name as a parameter and setup a profile base
public static someclass GetProfile(string username)
{
(someclass)Create(usernName);
}
public string _firstname
{
get
{
base[“FIRSTNAME”] = value
}
set
{
value = base[“FIRSTNAME”]
}
}
}
}
Now you should be have strongly typed access to your custom member properties and no properties needing to be defined in the web config.
Thanks for reading, please comment, suggest new topics and correct me if you think there is a better way of doing something
Charlie :).
is working on a reply...