Identity User.GetUserId()一旦可用,一旦不在控制器

时间:2016-03-24 11:38:40

标签: c# asp.net asp.net-identity-3

tl; dr:位于底部;)

想象一下,我有一些带有一些笔记的数据库。要向用户显示它们,我使用此方法(此处为Entity Framework):

var allNotes = db.Notes.Where(x => AllowAccess(x.AuthorId, User.GetUserId())).ToList();

AllowAccess()是决定当前用户是否有权查看笔记的功能。 “x.AuthorId”是存储注释所有者ID的变量。

注意:User.GetUserId()是返回当前用户的id的方法。我使用Asp.net identity 3进行身份验证(所有身份验证代码都是generated by Visual Studio for me

这是目前的功能:

public bool AllowAccess(string dbID, string userIdFromController)
    {
        var userId = User.GetUserId();

        if(userId == null && userIdFromController != null)
        {
            Trace.Write("-----------null userId");
        }
        else if (userId == null && userIdFromController == null)
        {
            Trace.Write("-----------null userId ");
        }
        else
        {
            Trace.Write("-----------OK userId ");
        }

        return dbID == User.GetUserId();
    }

问题是:“userId”变量有时包含用户ID,有时不包含。我猜不出为什么会这样。没有规则:它只是有时等于null。我首先认为这是asp.net身份3的问题,它有时会失败,但没有。

如您所见,我的函数获取了第二个名为“userIdFromController”的参数。它与“userId”几乎相同,但有一点不同:我直接从控制器调用User.GetUserId()(正如您在此问题的第一段代码中所见)。

你知道发生了什么吗? “userIdFromController”始终设置正确,“userId”有时不正确。我在AllowAccess函数中的所有“if语句”中设置了断点,并且不时地调用第一个断点(第二个从不,第三个最常见)。

TL; DR: 所以,总结一下:“userId”和“userIdFromController”是一样的,但第一个是在AllowAccess函数中创建的,第二个是:直接在调用AllowAccess的控制器中创建。 “userIdFromController”总是有效,“userId”。为什么会这样?

0 个答案:

没有答案