Есть странная вещь, происходящая здесь.
Я создал веб-сайт ASP.NET MVC5 и поддерживаю локальные учетные записи с помощью идентификатора ASP.NET.
Теперь я пытаюсь включить внешнюю аутентификацию, но имеет некоторые странности.
Я уверен, что следил за правильными шагами. У меня это в моем Startup.Auth.cs:
public void ConfigureAuth(IAppBuilder app)
{
// Enable the application to use a cookie to store information for the signed in user
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationType = DefaultAuthenticationTypes.ApplicationCookie,
LoginPath = new PathString("/Account/Login")
});
// Use a cookie to temporarily store information about a user logging in with a third party login provider
app.UseExternalSignInCookie(DefaultAuthenticationTypes.ExternalCookie);
// Uncomment the following lines to enable logging in with third party login providers
//app.UseMicrosoftAccountAuthentication(
// clientId: "",
// clientSecret: "");
//app.UseTwitterAuthentication(
// consumerKey: "",
// consumerSecret: "");
//app.UseFacebookAuthentication(
// appId: "",
// appSecret: "");
app.UseGoogleAuthentication();
}
Когда пользователь нажимает на ссылку для входа в Google, вызывается метод ExternalLogin:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult ExternalLogin(string provider, string returnUrl)
{
// Request a redirect to the external login provider
return new ChallengeResult(provider, Url.Action("ExternalLoginCallback", "Account", new { ReturnUrl = returnUrl }));
}
который я проверил посредством отладки, попадает в метод ExecuteResult класса ChallengeResult:
public override void ExecuteResult(ControllerContext context)
{
var properties = new AuthenticationProperties() { RedirectUri = RedirectUri };
if (UserId != null)
{
properties.Dictionary[XsrfKey] = UserId;
}
context.HttpContext.GetOwinContext().Authentication.Challenge(properties, LoginProvider);
}
Однако в браузере ничего не происходит. Я просто получаю пустую страницу, где я ожидаю перенаправления на страницу входа в Google.
Об ошибках не сообщается вообще.
Другим смешным было то, что я попытался создать другое приложение MVC5, но я получаю всплывающее сообщение "Object reference not set to object of object" в VS2013, а в результирующем проекте отсутствует контроллер учетной записи, который обычно существует по умолчанию.
Я отремонтировал установку VS2013, я повторно установил Update 1, и я также обновил все пакеты Nuget в решении.
У меня закончились идеи о том, куда идти дальше.
Обновление 1 Подумав, что это может быть связано с моим ПК, я развернул сайт для Azure, и проблема все еще сохраняется. Означает ли это, что это может быть связано с отсутствующей сборкой, и она не сообщается правильно? Я запустил fusionlog, но не вижу никаких сбоев связи.
Скручивание новой виртуальной машины с чистой установкой Windows 8 и VS2013, чтобы увидеть, могу ли я получить там новый проект.
Обновление 2 Хорошо, просто запустил еще один раунд "сетевого" захвата, и когда пользователь выбирает внешнего провайдера, он отправляет сообщение в действие ExternalLogin, но ответ является неавторизованным. Что может быть причиной этого?