我真的刚刚开始进入这个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。
我看过我能找到的每个例子和视频,但仍然无法解决这个问题。
任何人都可以帮我解决此用户错误消息,而且,我是否只是缺少一些一般的最佳做法?感到失落和沮丧...
谢谢!
答案 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
- 因此,您的数据库中不存在该用户。
我认为您需要首先检查外部用户是否已注册,如果没有,请创建帐户,添加外部登录,然后添加声明。