1

我的 Request.IsAuthenticated 总是返回 false。我正在设置 AuthCookie

 CurrentRequest currentRequest = null;

            if (Url.IsLocalUrl(returnUrl) && returnUrl.Length > 1 && returnUrl.StartsWith("/")
                && !returnUrl.StartsWith("//") && !returnUrl.StartsWith("/\\"))
            {
                return Redirect(returnUrl);
            } else if (login.ValidateUser(acct.UserName, acct.Password))
            {
FormsAuthentication.SetAuthCookie(acct.UserName, true); //Edit on 11/12 @11:08
                currentRequest = new CurrentRequest();
                SessionWrapper.currentRequest = currentRequest;
                return RedirectToAction("About", "Home");
            }

//这是一个部分登录页面,应该显示登录或注销。

@using KMSS.Helper;

//这总是假的

    @if (Request.IsAuthenticated) //Same issue with User.Identity.IsAuthenticated
    {
        if (SessionWrapper.currentRequest != null)
        {
            <text> Welcome <strong> @SessionWrapper.currentRequest.Username </strong>
                [@Html.ActionLink("Sign Off", "Logoff", "Account")]
            </text>
        } else {
           @: [ @Html.ActionLink("Sign In", "Login", "Account") ]
        }
    } else
    {

       @:[ @Html.ActionLink("Sign In", "Login", "Account") ]
  }

在线阅读后,我创建了一个具有布尔值的类,并尝试使用该类。但是,我得到的对象未设置为新变量异常的实例。这是我的设置方式://部分登录页面

@model KMSS.Helper.ViewModelAuthenticate;

//这总是假的

    @if (Model.IsAuthenticated) 
//The model is null even though I create create a reference in the Login Method i.e.     
(ViewModelAuthenticate auth = new ViewModelAuthenticate();
    {
        if (SessionWrapper.currentRequest != null)
        {
            <text> Welcome <strong> @SessionWrapper.currentRequest.Username </strong>
                [@Html.ActionLink("Sign Off", "Logoff", "Account")]
            </text>
        } else {
           @: [ @Html.ActionLink("Sign In", "Login", "Account") ]
        }
    } else
    {

       @:[ @Html.ActionLink("Sign In", "Login", "Account") ]
  }

//这里是类 public class ViewModelAuthenticate { public bool IsAuthenticate { get; 放; } }

//这里是我在控制器中初始化类的地方

 public ActionResult Login()
        {
           ViewModelAuthenticate auth = new ViewModelAuthenticate();
            auth.IsAuthenticate = false;
            return View();
        }

//我在Login内外都试过这个,在部分登录视图之前调用 但是,我仍然得到对象未设置为新变量异常的实例。我在这里做错了什么?您的帮助将不胜感激。

//Showing the authentication section of the config file.

 <authentication mode="Forms">
      <forms loginUrl="~/Account/Login" timeout="2880" slidingExpiration="true" />
    </authentication>
4

3 回答 3

2

我用我在此处找到的示例替换了我的身份验证部分。它现在正在工作。

于 2013-11-12T17:49:16.507 回答
1

查看您的代码,我觉得这里发生的事情比您向我们展示的要多。具体来说,变量CurrentRequestand SessionWrapper,在 Action 方法调用的开头将它们设置为 null 等。我建议在您的项目中尝试一个基本的、简单的示例,然后根据需要开始重新添加项目。没有 AJAX,只有整个页面从您的登录表单回传到服务器。这样的示例如下所示:

登录视图模型

public class LoginViewModel{
   [Required]
   public string UserName {get;set;}

   [Required]
   public string Password {get;set;}
}

登录 POST Action 方法

[HttpPost]
public ActionResult Login(LoginViewModel model, string returnUrl){
   if(!ModelState.IsValid){
       return View();
   }
   if(!provider.ValidateUser(model.UserName, model.Password){
       ModelState.AddModelError("", "The username/password combination does not match");
       return View();
   }
   FormAuthentication.SetAuthCookie(model.UserName, true);
   if(!string.IsNullOrEmpty(returnUrl) && Url.IsLocalUrl(returnUrl){
       return Redirect(returnUrl);
   }
   return RedirectToAction("About", "Home");
}

关于视图

@if(Request.IsAuthenticated){
   <b>It WORKS!!</b>
}else{
   <b>Nope, still not working</b>
}
于 2013-11-12T16:20:39.710 回答
0

我正在测试,我把时间倒退了几天。出于某种原因,它在将日期放回去后引起了这个问题,这很好。我假设 Windows 窗体缓存了旧日期(即今天的日期),所以我认为它已过期。只是对这件事的一个想法。

于 2015-03-10T11:54:43.637 回答