【发布时间】:2016-12-09 15:36:17
【问题描述】:
我偶然发现了一个问题,即在向当前登录的用户添加社交媒体身份验证时,应用程序不一致地将用户重定向到 Account/AccessDenied/。它似乎在用户第一次登录时起作用,然后通过尝试添加另一种身份验证方法,它将用户返回到Account/AccessDenied?ReturnUrl=%2Fmanage%2Flinklogincallback。
我的猜测是 [Authorize] 属性出了点问题,但只是我第二次尝试添加外部身份验证方法。
管理控制器
[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的排列顺序?
这是请求/响应
【问题讨论】:
-
此错误是否持续发生?因为当我的代码仍然抛出错误异常时,我经常遇到这个错误。清除 cookie 暂时解决了这个问题。后来当我修复了我的小错误时,不再发生这种重定向。
-
它始终如一地发生,但我不知道它是什么,因为其他一切都按预期工作。您修复了哪些小错误以使其正常工作?
-
您是否在
Startup类的Configure()方法中添加了app.UseGoogleAuthentication(...)? -
我的错误是在 OAuth 挑战之后但在将 Faceboook 登录与用户关联之前抛出了一些异常。所以我最终得到了带有不存在用户声明的浏览器 cookie。清除 cookie 和 DELETE FROM USERS 表就可以了。尝试这样做,重置您的数据库和 cookie。
-
我还以用户(而不是开发人员)的身份访问了 Facebook,并从我的个人资料中删除了该应用程序并再次尝试。不确定 Google 是否可以做到这一点。
标签: c# asp.net-mvc asp.net-core .net-core