I am designing a web application using the ASP.net MVC framework. I would like to use Windows Authentication and do Role Checks using the Role Manager SQLRoleProvider.
How can I determine the email address of the current logged on user? Is this even possible?
The application will be deployed in a multi-domain intranet, if that matters (which I assume it does).
Thanks for any help!
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Here is a sample from some code:
DirectorySearcher searcher = new DirectorySearcher();
searcher.Filter = string.Format("sAMAccountName={0}", _name);
SearchResult user = searcher.FindOne();
string emailAddr = user.Properties["mail"][0].ToString();
Method 2
You can look up the user’s properties in Active Directory. Here is a great article that explains how to do that using System.DirectoryServices and C#:
http://www.codeproject.com/Articles/6778/How-to-get-User-Data-from-the-Active-Directory
Method 3
In MVC5 application give the action as given below
public ActionResult Index()
{
string name = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
ViewBag.Name = name;
ViewBag.Email = uEmail(User.Identity.Name.Replace(@"YOURDOMAIN", ""));
return View();
}
Change the YOURDOMAIN to your domain name. And give the uEmail function as given below. Also add the reference to using System.Security.Principal and using System.DirectoryServices.
private string uEmail(string uid)
{
DirectorySearcher dirSearcher = new DirectorySearcher();
DirectoryEntry entry = new DirectoryEntry(dirSearcher.SearchRoot.Path);
dirSearcher.Filter = "(&(objectClass=user)(objectcategory=person)(mail=" + uid + "*))";
SearchResult srEmail = dirSearcher.FindOne();
string propName = "mail";
ResultPropertyValueCollection valColl = srEmail.Properties[propName];
try
{
return valColl[0].ToString();
}
catch
{
return "";
}
}
Method 4
The asp.net membership services database is just a database, which you can execute a query against directly. I dont think the default membership provider has a way to get the email address however.
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0