我正试图检索已登录的用户。但当我登录时,它运行一个错误,说:'Object reference not set to an instance of an object(对象引用未设置为对象的实例)'
所以我现在要做的是登录并显示用户的详细信息以及进入 索引页. 但是现在由于遇到错误,我无法登录。
我的代码如下。
HomeController
[Authorize]
public ActionResult Index()
{
var mods = new mymodel();
var UserId = User.Identity.Name;
var user = db.Users.Where(x => x.IDno == UserId).FirstOrDefault();
user.FirstName = user.FirstName;
var data = (from rv in db.RequestVouchers
join cust in db.Users on rv.IDno equals cust.IDno
where rv.IDno == UserId
select new
{
HouseNumber = rv.HouseNumber,
Address = rv.Address,
City = rv.City,
Province = rv.Province,
PostalCode = rv.PostalCode,
Status = rv.Status,
VoucherNumber = rv.VoucherNumber,
TrackingOrder = rv.TrackingOrder,
CreatedDate = rv.CreatedDate
}).OrderByDescending(x => x.CreatedDate).FirstOrDefault();
if (data != null)
{
//ViewBag.IDno = data.IDno;
ViewBag.HouseNumber = data.HouseNumber;
ViewBag.Address = data.Address;
ViewBag.City = data.City;
ViewBag.Province = data.Province;
ViewBag.PostalCode = data.PostalCode;
ViewBag.Status = data.Status;
ViewBag.TrackingOrder = data.TrackingOrder;
ViewBag.VoucherNumber = data.VoucherNumber;
}
else
{
ViewBag.HouseNumber = "";
ViewBag.Address = "";
ViewBag.City = "";
ViewBag.Province = "";
ViewBag.PostalCode = "";
ViewBag.Status = "";
ViewBag.TrackingOrder = "";
ViewBag.VoucherNumber = "";
}
return View(user);
}
AccountController
//Login
[HttpGet]
public ActionResult Signin()
{
return View();
}
//Login Post
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Signin(UserLogin login, string ReturnUrl = "")
{
string message = "";
using (mymodel dc = new mymodel())
{
var v = dc.Users.Where(a => a.IDno == login.IDno).FirstOrDefault();
if (v != null)
{
if (!v.IsEmailVerified)
{
ViewBag.Message = "Please verify your ID number first";
return View();
}
if (string.Compare(Crypto.Hash(login.Password), v.Password) == 0)
{
int timeout = login.RememberMe ? 525600 : 20; // 525600 min = 1 year
var ticket = new FormsAuthenticationTicket(login.IDno, login.RememberMe, timeout);
string encrypted = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
cookie.Expires = DateTime.Now.AddMinutes(timeout);
cookie.HttpOnly = true;
Response.Cookies.Add(cookie);
if (Url.IsLocalUrl(ReturnUrl))
{
return Redirect(ReturnUrl);
}
else
{
return RedirectToAction("Index", "Home", "Home");
}
}
else
{
message = "Invalid credential provided";
}
}
else
{
message = "Invalid credential provided";
}
}
ViewBag.Message = message;
return View();
}
型号 [Table("User")] public partial class User { [Key] public Guid CustomerId { get; set; }。
[Required(ErrorMessage = "Firstname is required")]
[StringLength(50)]
public string FirstName { get; set; }
[Required(ErrorMessage = "Lastname is required")]
[StringLength(50)]
public string LastName { get; set; }
[Required(ErrorMessage = "SA ID Number is required")]
public string IDno { get; set; }
[Required]
[StringLength(254)]
public string EmailId { get; set; }
[Required(ErrorMessage = "SA Phone Number is required")]
[StringLength(100)]
public string PhoneNumber { get; set; }
[Required]
public string Location { get; set; }
[StringLength(50)]
public string HouseNumber { get; set; }
[StringLength(50)]
public string PostalCode { get; set; }
public DateTime? CreatedDate { get; set; }
[Required(ErrorMessage = "Password is required")]
[MembershipPassword(MinRequiredNonAlphanumericCharacters = 1, MinNonAlphanumericCharactersError = "Your password needs to contain at least one symbol (!, @, #, etc).", ErrorMessage = "Your password must be 6 characters long and contain at least one symbol (!, @, #, etc).", MinRequiredPasswordLength = 6)]
[DataType(DataType.Password)]
public string Password { get; set; }
[Required(ErrorMessage = "Confirm Password is required")]
[DataType(DataType.Password)]
public string ConfirmPassword { get; set; }
public bool IsEmailVerified { get; set; }
public Guid ActivationCode { get; set; }
[StringLength(100)]
public string ResetPasswordCode { get; set; }
}
public class UserLogin
{
[Display(Name = "IDno")]
[Required(AllowEmptyStrings = false, ErrorMessage = "ID Number required")]
public string IDno { get; set; }
[Required(AllowEmptyStrings = false, ErrorMessage = "Password required")]
[DataType(DataType.Password)]
public string Password { get; set; }
[Display(Name = "Remember Me")]
public bool RememberMe { get; set; }
}
Web.config
如果你使用 WebMatrix
请使用以下方式登录
WebSecurity.Login(userName,password,persistCookie);
用于表单认证使用的cookies。
FormsAuthentication.SetAuthCookie(model.UserName, model.RememberMe);
希望这能解决你的问题