Request.IsAuthenticated始终返回False

时间:2013-11-12 15:39:42

标签: asp.net-mvc-3 asp.net-mvc-4 telerik-mvc

我的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") ]
  }

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

@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") ]
  }

//这是班级 公共类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>

3 个答案:

答案 0 :(得分:2)

我使用此示例替换了我的身份验证部分,我找到了here的示例。它现在正在运作。

答案 1 :(得分:1)

看看你的代码,我觉得这里发生的事情比你向我们展示的更多。具体来说,变量CurrentRequestSessionWrapper,在Action方法调用开始时将它们设置为null等。我建议在项目中尝试一个基本的,简单的骨骼示例,然后开始添加项目根据需要回来。没有AJAX,只有整页从您的登录表单发回服务器。这样的例子看起来像:

登录视图模型

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

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

登录POST操作方法

[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>
}

答案 2 :(得分:0)

我正在测试,我将时间安排回来几天。由于某些原因,在将日期归还之后就引起了这个问题,这很好。我假设Windows窗体具有缓存的旧日期(今天的日期),所以我认为它已过期。只是想一想这件事。