Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Override User.Identity.Name or Custom IIdentity

1,174 views
Skip to first unread message

Corker

unread,
Mar 8, 2010, 6:32:01 PM3/8/10
to
Hi I am using the standard asp.net login control and it is currently working
well where my users can login with their email address and password.
I want to modify this so they can enter their email address or membership
number and password. I have a custom membership provider class where I check
the login details based on whether an email or number has been entered, again
this is fine.
Finally, my problem is that User.Identity.Name is whatever was entered in
the login box, I want this to always be an email address so can you suggest
how I can override this value?
I created a Custom Identity class and tried assigning that in Global.asax
Application_AuthenticateRequest, but it says it cannot resolve the type
MyNamespace.CustomIdentity. I'm not sure what to try next.

Joe Kaplan

unread,
Mar 9, 2010, 7:31:42 PM3/9/10
to
You are close to getting this. The authenticate event on the ASP.NET
pipeline is the proper event to handle. Basically, you want your custom code
to run after the various authentication mechanisms like forms auth and
membership but before authorization takes place. Essentially, you want to be
the last handler of the Authenticate event. Here, you can swap out the
principal for whatever you want.

Your issue sounds like a simple problem related to type references where the
.NET framework cannot find your class by the name you tried to use for it.
This is a more generic issue that you should be able to figure out. Using
the object browser to find the real name of your type may be helpful.

--
Joe Kaplan-MS MVP Directory Services Programming
Co-author of "The .NET Developer's Guide to Directory Services Programming"
http://www.directoryprogramming.net
"Corker" <Cor...@discussions.microsoft.com> wrote in message
news:81DD5F9E-20EC-4505...@microsoft.com...

Everardo Garcia

unread,
Jul 1, 2011, 10:11:04 AM7/1/11
to
Hi

We had this problem a few days ago, you can set User value, however the authentication cookie is created with the text entered in the user name textbox, then the cookie is included in the response to the browser and when the browser made a request the cookie is decrypted and the original user name is assigned to the Identity (User).

Assign the new user name on login_Authenticate event when the user succesfully authenticate:

GenericIdentity identity = new GenericIdentity(yourNewUserName, "Forms");
HttpContext.Current.User = new GenericPrincipal(identity, new string[]{});
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User;


You can watch cookies in debug mode using Response.Cookies, but there are no cookie in Authenticate event, then you use login_LoggedIn event to clear cookie collection and set a new cookie with your new user name:

protected void login_LoggedIn(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(User.Identity.Name))
{
Response.Cookies.Clear();
FormsAuthentication.SetAuthCookie(User.Identity.Name, this.lgnLogin.RememberMeSet);
}
}

Good luck!

> MyNamespace.CustomIdentity. I am not sure what to try next.

Everardo Garcia

unread,
Jul 1, 2011, 10:12:11 AM7/1/11
to
Hi

We had this problem a few days ago, you can set User value, however the authentication cookie is created with the text entered in the user name textbox, then the cookie is included in the response to the browser and when the browser made a request the cookie is decrypted and the original user name is assigned to the Identity (User).

Assign the new user name on login_Authenticate event when the user succesfully authenticate:

GenericIdentity identity = new GenericIdentity(yourNewUserName, "Forms");
HttpContext.Current.User = new GenericPrincipal(identity, new string[]{});
System.Threading.Thread.CurrentPrincipal = HttpContext.Current.User;


You can watch cookies in debug mode using Response.Cookies, but there are no cookie in Authenticate event, then you use login_LoggedIn event to clear cookie collection and set a new cookie with your new user name:

protected void login_LoggedIn(object sender, EventArgs e)
{
if (!string.IsNullOrWhiteSpace(User.Identity.Name))
{
Response.Cookies.Clear();
FormsAuthentication.SetAuthCookie(User.Identity.Name, this.lgnLogin.RememberMeSet);
}
}

Good luck!

> On Monday, March 08, 2010 6:32 PM Corker wrote:

> MyNamespace.CustomIdentity. I am not sure what to try next.


>> On Tuesday, March 09, 2010 7:31 PM Joe Kaplan wrote:

>> You are close to getting this. The authenticate event on the ASP.NET
>> pipeline is the proper event to handle. Basically, you want your custom code
>> to run after the various authentication mechanisms like forms auth and
>> membership but before authorization takes place. Essentially, you want to be
>> the last handler of the Authenticate event. Here, you can swap out the
>> principal for whatever you want.
>>
>> Your issue sounds like a simple problem related to type references where the
>> .NET framework cannot find your class by the name you tried to use for it.
>> This is a more generic issue that you should be able to figure out. Using
>> the object browser to find the real name of your type may be helpful.
>>
>> --
>> Joe Kaplan-MS MVP Directory Services Programming
>> Co-author of "The .NET Developer's Guide to Directory Services Programming"
>> http://www.directoryprogramming.net

julius....@gmail.com

unread,
Jul 10, 2014, 7:49:11 AM7/10/14
to
Hi Garcia,

I am looking for a working example of this implementation. If you can send me an example, it would be great.

Regards,

Julius
0 new messages