无法找到UserId

时间:2015-09-09 01:23:16

标签: c# asp.net .net asp.net-mvc linkedin

我真的刚刚开始进入这个LinkedIn API以及ASP.NET MVC,所以请耐心等待。我正在尝试对我的用户进行身份验证,这似乎正在运行,但是当我尝试存储accessToken值(也看似有效)时,我收到错误:

“异常详细信息:System.InvalidOperationException:找不到UserId。”

错误发生在评论“// ERROR OCCURS HERE”

public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
    {
        var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
        if (loginInfo == null)
        {
            return RedirectToAction("Login");
        }

        var claimsIdentity = await AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);

        if (claimsIdentity != null)
        {
            var userIdClaim = claimsIdentity.Claims.FirstOrDefault(x => x.Type == ClaimTypes.NameIdentifier);

            if (userIdClaim != null)
            {
                // userIdClaim.Value here is: 5-0Vfh4Gv_
                var accessToken = claimsIdentity.FindAll(loginInfo.Login.LoginProvider + "_AccessToken").First();

                if (accessToken != null)
                {
                    // gets to this point, but...
                    await UserManager.AddClaimAsync(userIdClaim.Value, accessToken); // ERROR OCCURS HERE
                }
            }
        }

... ... ... 
}

此代码是Visual Studio中MVC应用程序模板的99%。我改变的唯一事情是添加linkedin NuGet包(install-package linkedin)并在Startup.Auth.cs中设置我的API密钥/密钥。完全可能(甚至可能)我只是做了一些乱序或者错误地获取用户ID。

我看过我能找到的每个例子和视频,但仍然无法解决这个问题。

任何人都可以帮我解决此用户错误消息,而且,我是否只是缺少一些一般的最佳做法?感到失落和沮丧...

谢谢!

2 个答案:

答案 0 :(得分:0)

错误消息说明了一切。我认为您没有正确获得用户ID。

尝试

await UserManager.AddClaimAsync(claimsIdentity.GetUserId(), accessToken);

而不是

await UserManager.AddClaimAsync(userIdClaim.Value, accessToken);

答案 1 :(得分:0)

问题在于:

await UserManager.AddClaimAsync(userIdClaim.Value, accessToken);

第一个参数应该是身份数据库表中用户的UserId(即aspnetusers)。

您从LinkedIn传递nameidentifer - 因此,您的数据库中不存在该用户。

我认为您需要首先检查外部用户是否已注册,如果没有,请创建帐户,添加外部登录,然后添加声明。