Я наткнулся на проблему, когда непоследовательно приложение перенаправляет пользователя на Account/AccessDenied/
при добавлении аутентификации в социальные сети к текущему зарегистрированному пользователю. Кажется, что он работает при первом Account/AccessDenied?ReturnUrl=%2Fmanage%2Flinklogincallback
пользователя в систему, а затем, добавив еще один метод проверки подлинности, возвращает пользователя в Account/AccessDenied?ReturnUrl=%2Fmanage%2Flinklogincallback
.
Я предполагаю, что что-то идет не так с атрибутом [Authorize], но только во второй раз я пытаюсь добавить внешний метод проверки подлинности.
ManageController
[Authorize]
public class ManageController : Controller
{
//
// POST: /Manage/LinkLogin
[HttpPost]
[ValidateAntiForgeryToken]
public IActionResult LinkLogin(string provider)
{
// Request a redirect to the external login provider to link a login for the current user
var redirectUrl = Url.Action("LinkLoginCallback", "Manage");
var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, _userManager.GetUserId(User));
return Challenge(properties, provider);
}
//
// GET: /Manage/LinkLoginCallback
[HttpGet]
public async Task<ActionResult> LinkLoginCallback()
{
var user = await GetCurrentUserAsync();
if (user == null)
{
return View("Error");
}
var info = await _signInManager.GetExternalLoginInfoAsync(await _userManager.GetUserIdAsync(user));
if (info == null)
{
return RedirectToAction(nameof(ManageLogins), new { Message = ManageMessageId.Error });
}
var result = await _userManager.AddLoginAsync(user, info);
var message = result.Succeeded ? ManageMessageId.AddLoginSuccess : ManageMessageId.Error;
return RedirectToAction(nameof(ManageLogins), new { Message = message });
}
}
Может быть, порядок расположения startup.cs?
Это запрос/ответ