无法删除用户外部登录
Posted
技术标签:
【中文标题】无法删除用户外部登录【英文标题】:Unable to remove user external login 【发布时间】:2014-11-27 07:01:22 【问题描述】:我正在尝试使用个人帐户的 MVC 5.2 模板。一切正常,除了当我尝试删除用户的登录时,我收到以下错误消息:
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
在 ManagerController 的下面一行:
var result = await this.UserManager.RemoveLoginAsync(this.User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));
这是完整的 RemoveLogin 操作:
[HttpPost]
[Route("RemoveLogin")]
[ValidateAntiForgeryToken]
public async Task<ActionResult> RemoveLogin(string loginProvider, string providerKey)
ManageMessageId? message;
var result = await this.UserManager.RemoveLoginAsync(this.User.Identity.GetUserId(), new UserLoginInfo(loginProvider, providerKey));
if( result.Succeeded )
var user = await this.UserManager.FindByIdAsync(this.User.Identity.GetUserId());
if( user != null )
await this.SignInAsync(user, isPersistent: false);
message = ManageMessageId.RemoveLoginSuccess;
else
message = ManageMessageId.Error;
return this.RedirectToAction("ManageLogins", new Message = message );
【问题讨论】:
我也有同样的问题:loginProvider 和 providerKey 都是空的。 【参考方案1】:我可以通过更改线路让它工作:
public async Task<IActionResult> RemoveLogin(
string loginProvider,
string providerKey)
到
public async Task<IActionResult> RemoveLogin(
[Bind(Prefix = "Account.LoginProvider")]string loginProvider,
[Bind(Prefix = "Account.ProviderKey")]string providerKey)
原因:
无论出于何种原因,MVC 绑定没有正确解析参数绑定:
<input asp-for="@account.LoginProvider" type="hidden" />
<input asp-for="@account.ProviderKey" type="hidden" />
正在创建以下表单:
<input type="hidden" id="account_LoginProvider" name="account.LoginProvider" value="Facebook">
<input type="hidden" id="account_ProviderKey" name="account.ProviderKey" value="...">
这些名称未绑定到参数名称 loginProvider 和 providerKey。
这是提供解决方法的答案:
https://***.com/a/3869512/567524
【讨论】:
以上是关于无法删除用户外部登录的主要内容,如果未能解决你的问题,请参考以下文章
SQLServer无法删除登录名'***',因为该用户当前正处于登录状态解决方法
尝试将用户登录到 QBChat 时如何删除错误“无法识别的选择器”