Я использую OWIN Oauth Instagram для входа в приложение MVC 5 со следующим кодом:
Startup.Auth.cs
app.UseInstagramAuthentication(new InstagramAuthenticationOptions()
{
ClientId = "myCID",
ClientSecret = "mySecret",
SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie,
Provider = new InstagramAuthenticationProvider()
{
OnAuthenticated = (context) =>
{
context.Identity.AddClaim(new Claim("igAccessToken", context.AccessToken));
context.Identity.AddClaim(new Claim("igFullName", context.FullName));
context.Identity.AddClaim(new Claim("igProfilePic", context.ProfilePicture));
context.Identity.AddClaim(new Claim("igUsername", context.UserName));
foreach (var claim in context.User)
{
var claimType = string.Format("{0}", claim.Key);
string claimValue = claim.Value.ToString();
if (!context.Identity.HasClaim(claimType, claimValue))
context.Identity.AddClaim(new Claim(claimType, claimValue, "XmlSchemaString", "Instagram"));
}
return Task.FromResult(0);
}
}
});
Вход работает, и я могу сохранить эту информацию в таблице AspNetUserRoles, добавив новые столбцы для хранения.соответственно данные, но я не думаю, что это лучший метод, и я не знаю, как получить доступ к информации.Как мне получить доступ к этим данным с помощью чего-то вроде:
SomeController.cs
var info = await AuthenticationManager.GetExternalLoginInfoAsync();
var pic = info.ExternalIdentity.Claims.First(c => c.Type == "igProfilePic").Value;
var fullName = info.ExternalIdentity.Claims.First(c => c.Type == "igFullName").Value;
var accessToken = info.ExternalIdentity.Claims.First(c => c.Type == "igAccessToken").Value;
Приведенный выше код выдает Object reference not set to an instance of an object.
, и после отладки ничего в информационном контексте не заставляет меня думать, что утверждение никогда не сохраняется вКонтекст ExternalIdentity?
Примечание. Подобных вопросов довольно много, но они кажутся устаревшими и не работают для меня, поскольку большая часть моего кода заимствована из этих вопросов.