我正在开展一个项目,让员工可以随时进出,包括午餐。员工将输入他们的用户名和密码,然后单击时钟按钮。然后检查以确保用户名和密码在数据库中匹配。
我的用户名验证工作正常,但我很难用密码。 始终会返回if (empty($somelist)) {
// list is empty.
}
。
然后,在验证了用户名和密码之后,它会创建一个事件,该信息将在您开机时显示。我现在需要弄清楚如何检查该事件是否没有列出结束时间,以编辑活动并添加他们退休时间的结束时间。如果有开始和结束时间,则需要创建新事件。
模型:
null
控制器:
[Key]
public Guid EventID { get; set; }
public DateTime Start { get; set; }
public DateTime? End { get; set; }
public string Note { get; set; }
[Timestamp]
public byte[] Timestamp { get; set; }
public string Title { get; set; }
public bool ActiveSchedule { get; set; }
[Column("UserId")]
public string Id { get; set; }
[ForeignKey("Id")]
public virtual ApplicationUser User { get; set; }
}
答案 0 :(得分:0)
您的user.PasswordHash始终为NULL:)
// query db to check if user does exist but you do not retrieve it
if (db.Users.Where(x => x.Email == workTimeEvent.Email).Count() == 1)
{
var result = ph.VerifyHashedPassword(user.PasswordHash, workTimeEvent.Password);
if (result == PasswordVerificationResult.Success)
请尝试以下方法:
ApplicationUser user = new ApplicationUser
{
Email = workTimeEvent.Email
};
// query db to check if user does exist but you do not retrieve it
var dbUser = db.Users.FirstOrDefault(x => x.Email == workTimeEvent.Email);
if (dbUser == null)
{
ModelState.AddModelError("", "Login failed!");
return View("inValid");
}
var result = ph.VerifyHashedPassword(dbUser.PasswordHash, workTimeEvent.Password);
如果找不到任何内容,FirstOrDefault会返回null。
此外,我会更改您的身份验证检查,如下所示:
if (result != PasswordVerificationResult.Success)
{
ModelState.AddModelError("", "Login failed!");
return View("inValid");
}
关于你的第二个问题,遗憾的是我不清楚你想要实现的目标。你想参加最新的活动吗?然后检查是否设置了EndTime?
修改强>
根据您的评论响应,您要检查是否存在已创建的事件(事件确实描述了数据库表/信息而不是c#事件),但未设置结束时间。如果是这样,则需要使用结束时间进行更新。由于End being为可以为空的DateTime,我们使用EntityFramework和HasValue属性进行检查:
var notFinishedEvent = db.WorkTimeEvents.FirstOrDefault(x=>x.Id == dbUser.Id && !x.End.HasValue);
if(notFinishedEvent != null)
{
notFinishedEvent.End = DateTime.Now;
db.SaveChanges();
}
else
{
// create new one to save...
}
此代码依赖于只有一个事件没有设置结束日期。我不知道您的Start的默认值,但您可以轻松地将其添加为最新的检查或查询(使用OrderByDescending并采取第一个)。