我的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>
答案 0 :(得分:2)
我使用此示例替换了我的身份验证部分,我找到了here的示例。它现在正在运作。
答案 1 :(得分:1)
看看你的代码,我觉得这里发生的事情比你向我们展示的更多。具体来说,变量CurrentRequest
和SessionWrapper
,在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窗体具有缓存的旧日期(今天的日期),所以我认为它已过期。只是想一想这件事。