找到这个没有好运,但是我想通过强制他们再次登录来重新检查用户,然后再继续查看视图或POST。我该如何做到这一点?
背景是该用户是管理员(管理员角色),并且在执行该功能之前,我希望保护一些管理员功能,以强制他们再次输入密码。其中一个功能是重置数据,所以基本上需要事先检查。
答案 0 :(得分:0)
我认为您可以使用会话超时或身份验证超时,这样您就可以腾出时间,例如,如果管理员离开10分钟或者某个时间,它会因为会话结束而退出,但会话的默认时间是20分钟。
我发现这个用于身份验证超时并且也称为Owin身份验证,您应该在StartUp.cs
文件夹中的App_Start
文件中输入类似内容:
public void ConfigureAuth(IAppBuilder app)
{
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login"),
// here you go
ExpireTimeSpan = new TimeSpan(60000000000)
});
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
}
答案 1 :(得分:0)
请在发布期间请求并行身份验证。
无论用户是否登录天气,您都可以在发布的表单中包含用户名和密码(或任何身份验证凭据)。在帖子之前,获取凭据,添加到表单并发布。
这样,您可以在操作方法本身中验证用户。如果凭据错误,您可以中止该功能并返回错误。
仅在启动帖子时显示凭据字段(如在引导模式中)。你可以使用jQuery来实现这一目标。
修改:
在这里,我们没有使用cookie中的任何内容。或任何以前存储的位置。 我们让用户在表单中输入UN,密码 ,使用authorize方法验证现在收集的凭据,如果匹配,则继续。
让我进一步解释一下这个情景。
我们有一个需要编辑电子邮件的表单。
所以,我们的表单将是:
//The form includes fields for Username and password without which, you could bring in form validation error.
<form>
Name: <input type="text" name="Name"><br>
Email: <input type="text" name="Email"><br>
UserName: <input type="text" name="UserName"><br>
Password: <input type="password" name="Password"><br>
<input type="submit" value="Submit">
</form>
,操作是:
public ActionResult EditUser(string Name, string Email, string UserName, string Password)
{
if(AutorizeLogin(UserName,Password)) //The Login function which returns bool(The function used for login)
{
var User = DBContext.Users.SingleOrDefault(x=>x.UserName == UserName);
User.Name = Name; //Edit the values
User.Email = Email;
DBContext.SaveChanges(); //Save changes to database
}
else
{
//throw error
}
}
即使用户已登录,但没有UN和Pwd,他也无权更改电子邮件或姓名。