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 (将#修改为@)