我正在使用ASP.net MVC框架设计一个Web应用程序。我想使用Windows身份验证并使用Role Manager SQLRoleProvider进行角色检查。
如何确定当前已登录用户的电子邮件地址?这是否可能?
如果有多个域的内部网络环境,这将影响应用程序的部署(我认为这很重要)。
谢谢您的帮助!
如何确定当前已登录用户的电子邮件地址?这是否可能?
如果有多个域的内部网络环境,这将影响应用程序的部署(我认为这很重要)。
谢谢您的帮助!
这是一段代码示例:
DirectorySearcher searcher = new DirectorySearcher();
searcher.Filter = string.Format("sAMAccountName={0}", _name);
SearchResult user = searcher.FindOne();
string emailAddr = user.Properties["mail"][0].ToString();
http://www.codeproject.com/Articles/6778/How-to-get-User-Data-from-the-Active-Directory
public ActionResult Index()
{
string name = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
ViewBag.Name = name;
ViewBag.Email = uEmail(User.Identity.Name.Replace(@"YOURDOMAIN\", ""));
return View();
}
将YOURDOMAIN更改为您的域名。并按照以下所示提供uEmail函数。还要添加使用System.Security.Principal和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 "";
}
}
System.Security.Principal.WindowsIdentity.GetCurrent()
并不能给你客户端的身份,而是网站托管用户的身份... - PieterjanASP.NET的成员服务数据库只是一个数据库,您可以直接执行查询。但我认为默认的成员提供程序没有获取电子邮件地址的方法。