为什么用户必须两次输入正确的凭据?

卡斯特·特洛伊
public ActionResult Login(CredentialsModel model)
{
    authenticator.Authenticate(model.Username, model.Password);

    if (authenticator.Authenticated)
    {
        return Redirect();
    }
}

...

public class Authenticator : IAuthenticator
{
    public bool Authenticated
    {
        get { return HttpContext.Current.User.Identity.IsAuthenticated; }
    }

    public void Authenticate(string username, string password)
    {
        var authenticated = FormsAuthentication.Authenticate(username, password);
        if (authenticated)
            FormsAuthentication.SetAuthCookie(username, false);
    }

    public void Logout()
    {
       FormsAuthentication.SignOut();
    }
}

当上述操作方法向该方法提供一些有效凭据时Authenticate,该Authenticated属性返回false,这显然是错误的。

当操作方法第二提供某些凭据时,该Authenticated属性返回true。

我怀疑这与上下文没有立即更新有关。实际上,我通过使用FormsAuthentication.Authenticateaction方法中的立即返回值设法解决了该错误,但是我想知道为什么会发生此错误。

阿德里亚诺·雷佩蒂(Adriano Repetti)

因为在第一次调用用户/发送的HTTP上下文没有认证(但它会被正确后,后续调用)。在此行之后:

var authenticated = FormsAuthentication.Authenticate(username, password);

您可能会看到authenticated != Authenticated为什么?MSDN

[HttpContext]封装有关单个HTTP请求的所有HTTP特定信息。

这意味着它根据请求(您的输入)而不是响应或将来的状态(您的输出)工作。如果您SignOut()在控制器的方法内执行操作,您还将看到HttpContext.Current.User.Identity.IsAuthenticated仍然是true

您可以做的是为添加一个布尔返回值Authenticate()

public bool Authenticate(string username, string password)
{
    var authenticated = FormsAuthentication.Authenticate(username, password);
    if (authenticated)
        FormsAuthentication.SetAuthCookie(username, false);

    return authenticated:
}

然后将控制器中的代码更改为:

if (authenticator.Authenticate(model.Username, model.Password))
{
    return Redirect();
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

为什么用户必须两次输入正确的凭据?

来自分类Dev

为什么我必须输入两次哨兵值才能退出循环?

来自分类Dev

为什么我必须输入两次我的回复才能注册?

来自分类Dev

为什么用户的输入不被识别为正确的?

来自分类Dev

为什么浮点值必须声明两次?

来自分类Dev

为什么我必须打两次查询?

来自分类Dev

为什么我必须打开我的csv两次?

来自分类Dev

Arduino IDE/ESP8266:为什么必须按两次按钮才能获得正确的输出?

来自分类Dev

按钮出现故障,我必须单击两次才能显示信息,而且照片未正确对齐,这是为什么?

来自分类Dev

为什么我必须为输入的每个字符串按两次Enter键?

来自分类Dev

C ++必须输入两次

来自分类Dev

为什么scanf要求两次输入

来自分类Dev

为什么scanf要求两次输入

来自分类Dev

提示输入两次并读入,直到用户正确输入了浮点数

来自分类Dev

提示输入两次并读入,直到用户正确输入了浮点数

来自分类Dev

两次解码bitmapfactory有什么用?

来自分类Dev

为什么我必须写两次此导入语句?

来自分类Dev

Hibernate 4.3,在构建SessionFactory时,为什么必须两次提供属性?

来自分类Dev

为什么创建NSInvocation必须指定两次选择器

来自分类Dev

为什么我必须将对象永久保存在HttpContext Cache中两次?

来自分类Dev

Rails-jQuery为什么我必须单击两次才能显示jQuery效果?

来自分类Dev

为什么必须单击两次才能使此JavaScript函数起作用?

来自分类Dev

为什么我必须点击两次才能触发事件?

来自分类Dev

为什么我必须在后端登录两次才能登录?

来自分类Dev

为什么我必须两次转义一个“点”?

来自分类Dev

Hibernate 4.3,在构建SessionFactory时,为什么必须两次提供属性?

来自分类Dev

Rails-jQuery为什么我必须单击两次才能显示jQuery效果?

来自分类Dev

为什么我必须单击两次按钮才能打开URL?

来自分类Dev

在这种情况下,为什么必须单击两次才能加载我的图像?

Related 相关文章

  1. 1

    为什么用户必须两次输入正确的凭据?

  2. 2

    为什么我必须输入两次哨兵值才能退出循环?

  3. 3

    为什么我必须输入两次我的回复才能注册?

  4. 4

    为什么用户的输入不被识别为正确的?

  5. 5

    为什么浮点值必须声明两次?

  6. 6

    为什么我必须打两次查询?

  7. 7

    为什么我必须打开我的csv两次?

  8. 8

    Arduino IDE/ESP8266:为什么必须按两次按钮才能获得正确的输出?

  9. 9

    按钮出现故障,我必须单击两次才能显示信息,而且照片未正确对齐,这是为什么?

  10. 10

    为什么我必须为输入的每个字符串按两次Enter键?

  11. 11

    C ++必须输入两次

  12. 12

    为什么scanf要求两次输入

  13. 13

    为什么scanf要求两次输入

  14. 14

    提示输入两次并读入,直到用户正确输入了浮点数

  15. 15

    提示输入两次并读入,直到用户正确输入了浮点数

  16. 16

    两次解码bitmapfactory有什么用?

  17. 17

    为什么我必须写两次此导入语句?

  18. 18

    Hibernate 4.3,在构建SessionFactory时,为什么必须两次提供属性?

  19. 19

    为什么创建NSInvocation必须指定两次选择器

  20. 20

    为什么我必须将对象永久保存在HttpContext Cache中两次?

  21. 21

    Rails-jQuery为什么我必须单击两次才能显示jQuery效果?

  22. 22

    为什么必须单击两次才能使此JavaScript函数起作用?

  23. 23

    为什么我必须点击两次才能触发事件?

  24. 24

    为什么我必须在后端登录两次才能登录?

  25. 25

    为什么我必须两次转义一个“点”?

  26. 26

    Hibernate 4.3,在构建SessionFactory时,为什么必须两次提供属性?

  27. 27

    Rails-jQuery为什么我必须单击两次才能显示jQuery效果?

  28. 28

    为什么我必须单击两次按钮才能打开URL?

  29. 29

    在这种情况下,为什么必须单击两次才能加载我的图像?

热门标签

归档