如何解决ASP.NET MVC:表 AspNetUserLogins 不记得数据
表 AspNetUserlogins 不记得数据。它应该记住用户通过外部登录(如 Facebook)注册时的数据。我已经使用 facebook 实现了外部登录,但出现了一些错误。有谁知道哪个方法/操作和哪个指令负责将数据保存到这个表?这可能是来自帐户控制器的操作。
编辑:我发现这是帐户控制器中的 ExternalLoginConfirmation 操作。它在指令中给了我一个错误:
result = await UserManager.AddLoginAsync(user.Id,info.Login);
(必须是将用户添加到 AspNetUserLogin 表的行),这就是为什么我将它放在 try-catch 块中并解决了我的问题,但我认为它根本没有被执行。它只是不再给我验证错误。我认为它有问题,因为我从 facebook 请求更多数据,比如用户的名字。它可能更改了登录信息中的某些内容,并且无法将其添加到数据库中。或者可能是因为我在我的用户身份中添加了“姓名”字段(代表名字)。
我的启动身份验证类:
var x = new FacebookAuthenticationoptions();
x.Scope.Add("email");
x.AppId = "2737863089761791";
//x.Scope.Add("public_profile");
x.AppSecret = "";
x.UserinformationEndpoint = "https://graph.facebook.com/v2.8/me?fields=id,name,email,first_name,last_name";
x.Provider = new FacebookAuthenticationProvider()
{
OnAuthenticated = async context =>
{
context.Identity.AddClaim(new System.Security.Claims.Claim("FacebookAccesstoken",context.Accesstoken));
foreach (var claim in context.User)
{
var claimType = string.Format("urn:facebook:{0}",claim.Key);
string claimValue = claim.Value.ToString();
if (!context.Identity.HasClaim(claimType,claimValue))
context.Identity.AddClaim(new System.Security.Claims.Claim(claimType,claimValue,"XmlSchemaString","Facebook"));
}
}
};
x.SignInAsAuthenticationType = DefaultAuthenticationTypes.ExternalCookie;
app.UseFacebookAuthentication(x);
(我从 facebook 请求一些字段,比如名字)。我删除了应用机密。
我的 ExternalLoginConfirmation 方法:
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> ExternalLoginConfirmation(ExternalLoginConfirmationviewmodel model,string returnUrl)
{
if (User.Identity.IsAuthenticated)
{
return RedirectToAction("Index","Manage");
}
if (ModelState.IsValid)
{
// Get the information about the user from the external login provider
var info = await AuthenticationManager.GetExternalLoginInfoAsync();
if (info == null)
{
return View("ExternalLoginFailure");
}
var user = new ApplicationUser { UserName = model.Email,Email = model.Email,Name = model.Name};
var result = await UserManager.CreateAsync(user);
if (result.Succeeded)
{
try
{
var useraux = await UserManager.FindByEmailAsync(model.Email);
result = await UserManager.AddLoginAsync(useraux.Id,info.Login);
}
catch (DbEntityValidationException e)
{
foreach (var eve in e.EntityValidationErrors)
{
Console.WriteLine("Entity of type \"{0}\" in state \"{1}\" has the following validation errors:",eve.Entry.Entity.GetType().Name,eve.Entry.State);
Response.Write("Object: " + eve.Entry.Entity.ToString());
Response.Write(" " +
"");
foreach (var ve in eve.ValidationErrors)
{
Console.WriteLine("- Property: \"{0}\",Error: \"{1}\"",ve.PropertyName,ve.ErrorMessage);
Response.Write(ve.ErrorMessage + "" +
"");
}
}
//throw;
}
if (result.Succeeded)
{
//--
//await StoreFacebookAuthToken(user);
await SignInManager.SignInAsync(user,isPersistent: false,rememberbrowser: false);
return RedirectToLocal(returnUrl);
}
}
AddErrors(result);
}
ViewBag.ReturnUrl = returnUrl;
return View(model);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。