为什么Context.User.Identity.Name总是空的?

本文关键字:Name Context User Identity 为什么 | 更新日期: 2023-09-27 18:15:43

Context.User.Identity.Name总是空的,目前我正在使用WebForms:

HttpCookie cookie = new HttpCookie("jamal");
cookie.Value = "bilal";
HttpContext.Current.Response.Cookies.Add(cookie);

这里我想要用户名:

public override Task OnConnected()
{
    AddUser(Context.User.Identity.Name, this.Context.ConnectionId);
}
private static void AddUser(String username, String connectionId)
{
    ISet<String> connections;
    if (users.TryGetValue(username, out connections) == false)
    {
        connections = users[username] = new HashSet<String>();
    }
    connections.Add(connectionId);
}

为什么Context.User.Identity.Name总是空的?

出现这种情况是因为您没有要求对该操作进行身份验证。
通过使用Authorize属性类对用户进行装饰,要求授权用户执行该操作——这将启动身份验证协商。我从来没有尝试过webform,但它应该工作,如果你在web配置中添加这个规则:

<authentication mode="Forms" />

尝试在Page_Load事件中调用它,您可能调用得太早了。

您创建cookie的方式,它不是一个身份验证cookie。如果创建新的Asp.net web窗体项目,Asp.net将为您处理身份验证过程。但是,如果您想创建自己的身份验证cookie,则必须遵循以下步骤。

来自asp.net的FormsAuthenticationModule通过检查认证票据对用户进行身份验证。你的饼干只有一个名字。你必须创建票。