GetExternalLoginInfoAsync всегда возвращает null при попытке входа с помощью Facebook или Google
у меня проблема с OWIN
проверка подлинности. Я всегда получаю значение null от GetExternalLoginInfoAsync()
когда я пытаюсь войти в систему с помощью Facebook или Google.
но есть какой-то мистический случай.. Когда я открываю скрипач. Я получаю правильные данные, используя этот метод.
Я не могу понять причину
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
спасибо заранее!!
2 ответов
я решил свою проблему, добавив этот код
context.RequestContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
класс:
private class ChallengeResult : HttpUnauthorizedResult
{
public ChallengeResult(string provider, string redirectUri)
: this(provider, redirectUri, null)
{
}
public ChallengeResult(string provider, string redirectUri, string userId)
{
LoginProvider = provider;
RedirectUri = redirectUri;
UserId = userId;
}
public string LoginProvider { get; set; }
public string RedirectUri { get; set; }
public string UserId { get; set; }
public override void ExecuteResult(ControllerContext context)
{
// this line fixed the problem with returing null
context.RequestContext.HttpContext.Response.SuppressFormsAuthenticationRedirect = true;
var properties = new AuthenticationProperties() { RedirectUri = RedirectUri };
if (UserId != null)
{
properties.Dictionary[XsrfKey] = UserId;
}
context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
}
}
это исправило мою проблему с возвращением NULL
.
Примечание: не используйте fiddler при входе в систему с авторизацией twitter. Вы получите сообщение об ошибке.
вы должны очистить сеанс перед ExternalLoginCallback.
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
ControllerContext.HttpContext.Session.RemoveAll();
// Request a redirect to the external login provider
return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
}