首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >找不到UserId

找不到UserId
EN

Stack Overflow用户
提问于 2015-09-09 09:23:16
回答 2查看 460关注 0票数 0

我真的刚刚开始接触这个MVC和ASP.NET LinkedIn,所以请耐心听我说。我正在尝试对我的用户进行身份验证,这似乎是有效的,但是当我尝试存储accessToken值(它似乎也是有效的)时,我得到了错误:

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

错误出现在注释"// error occurs“

代码语言:javascript
复制
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
                }
            }
        }

... ... ... 
}

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

我已经看了我能找到的每一个例子和视频,但仍然不能解决这个问题。

有没有人可以帮我处理这个用户错误消息,还有,我是不是错过了一些通用的最佳实践之类的东西?感到迷失和沮丧。

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2015-09-09 09:34:41

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

试一试

代码语言:javascript
复制
await UserManager.AddClaimAsync(claimsIdentity.GetUserId(), accessToken);

而不是

代码语言:javascript
复制
await UserManager.AddClaimAsync(userIdClaim.Value, accessToken);
票数 0
EN

Stack Overflow用户

发布于 2015-09-09 09:51:11

问题是在这一点上:

代码语言:javascript
复制
await UserManager.AddClaimAsync(userIdClaim.Value, accessToken);

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

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32469535

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档