【发布时间】:2015-10-07 14:48:43
【问题描述】:
我的公司正在使用 LDAP 对其用户进行身份验证。我有登录部分工作,但现在我需要一种登录后我们可以引用用户的方式。我尝试了多种方法,但都没有奏效。
这是我用来登录的代码:
var x = Membership.Provider;
if (Membership.ValidateUser(model.UserName, model.Password))
{
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
string userId = Membership.GetUser().ProviderUserKey.ToString();
return RedirectToAction("Index", "Home");
}
}
在这一行:
string userId = Membership.GetUser().ProviderUserKey.ToString();
我收到一个错误:
参数“用户名”不能为空。
我也从这里尝试了一些选项:
How can I access UserId in ASP.NET Membership without using Membership.GetUser()?
喜欢这个:
MembershipUser CurrentUser = Membership.GetUser(User.Identity.Name);
我得到了同样的错误
对于任何想知道的人,iamtooamazing 建议如下:
string userId = Membership.GetUser(model.UserName).ProviderUserKey.ToString();
这将在这种方法中起作用。但是,我将无法在解决方案的其他任何地方使用它。我需要可以在所有控制器(以及其中的方法)中使用的东西
使用此代码:
string user = ((CustomIdentity)User.Identity).UserId;
我在该行收到此错误:
无法转换类型的对象 'System.Security.Principal.GenericIdentity' 键入 'STCAuthentication.Models.CustomIdentity'。
这是我的代码的当前状态:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Login(LoginModel model, string returnUrl)
{
if (ModelState.IsValid)
{
var x = Membership.Provider;
if (Membership.ValidateUser(model.UserName, model.Password))
{
if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
&& !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
{
return Redirect(returnUrl);
}
else
{
string user = ((CustomIdentity)User.Identity).UserId;
return RedirectToAction("Index", "Home");
}
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
【问题讨论】:
-
你为什么不能这样做:string userId = Membership.GetUser(model.UserName).ProviderUserKey.ToString();?
-
@iamtooamazing 但这仅适用于此方法。在我的解决方案的任何其他地方我会做什么?
-
@iamtooamazing 你有什么想法吗?
-
@djblois 您在尝试投射身份时是否已经通过身份验证?
-
@SílvioN.,是的,我已经通过了身份验证
标签: c# asp.net-mvc asp.net-membership