Example #1
0
        public IActionResult Login([FromBody][Bind(include: "Email, Password")] Data.Entities.Account account)
        {
            PasswordHasher <Data.Entities.Account> hasher = new PasswordHasher <Data.Entities.Account>(
                new OptionsWrapper <PasswordHasherOptions>(
                    new PasswordHasherOptions()
            {
                CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV3
            }
                    ));

            if (!ModelState.IsValid)
            {
                return(BadRequest());
            }
            var user = _context.Accounts.FirstOrDefault(a => a.Email == account.Email);

            if (user == null)
            {
                return(NotFound());
            }
            ;
            var result = hasher.VerifyHashedPassword(user, user.Password, account.Password);

            if (result == PasswordVerificationResult.Success)
            {
                return(Ok(user));
            }

            return(Ok(account));
        }
Example #2
0
 public IActionResult Register([FromBody][Bind("Username, Email, Password")] Data.Entities.Account account)
 {
     if (ModelState.IsValid)
     {
         PasswordHasher <Data.Entities.Account> hasher = new PasswordHasher <Data.Entities.Account>(
             new OptionsWrapper <PasswordHasherOptions>(
                 new PasswordHasherOptions()
         {
             CompatibilityMode = PasswordHasherCompatibilityMode.IdentityV3
         }
                 ));
         account.Password = hasher.HashPassword(account, account.Password);
         account.Token    = Guid.NewGuid().ToString();
         _context.Accounts.Add(account);
         _context.SaveChanges();
         return(Ok(account));
     }
     return(BadRequest());
 }
Example #3
0
        /// <summary>
        /// 获得关系
        /// </summary>
        /// <param name="main"></param>
        /// <param name="relations"></param>
        public static void GetRelation(Data.Entities.Account main, params Data.Entities.Account[] relations)
        {
            if (String.IsNullOrEmpty(main.Name) || main.Type.HasValue == false)
            {
                throw new ArgumentException("main 中的属性name和Type必须有值");
            }
            var names = new List <String>();

            names.Add(main.Name);
            var types = new List <int>();

            types.Add((int)main.Type.Value);
            foreach (var r in relations)
            {
                if (r.Type.HasValue)
                {
                    types.Add(r.Type.Value);
                }
                if (String.IsNullOrEmpty(r.Name) == false)
                {
                    names.Add(r.Name);
                }
            }
            var entity = UMC.Data.Database.Instance().ObjectEntity <Data.Entities.Account>();

            entity.Where.And().In(new Data.Entities.Account
            {
                Name = names[0]
            }, names.ToArray()).And().In(new Data.Entities.Account {
                Type = types[0]
            }, types.ToArray());

            var  mids = new List <Guid>();
            Guid mid  = Guid.NewGuid();
            var  rels = new List <Data.Entities.Account>();

            entity.Order.Asc(new Data.Entities.Account {
                user_id = Guid.Empty
            });
            entity.Query(g =>
            {
                rels.Add(g);
                if (g.user_id.Value != mid)
                {
                    mid = g.user_id.Value;
                    mids.Add(mid);
                }
            });

            if (mids.Count > 0)
            {
                entity.Where.Reset().And().In(new Data.Entities.Account
                {
                    user_id = mids[0]
                }, mids.ToArray()).And().In(new Data.Entities.Account
                {
                    Type = main.Type
                }, types.ToArray());
                entity.Query(g =>
                {
                    rels.Add(g);
                });
            }
            var memberId = Guid.Empty;
            var orel     = rels.FindAll(g => g.Type == main.Type);

            var om = orel.Find(g => String.Equals(main.Name, g.Name) && g.Type == main.Type);

            if (om == null)
            {
                if (relations.Length > 0)
                {
                    var rel = new List <Data.Entities.Account>(relations).Find(g => String.IsNullOrEmpty(g.Name) == false);
                    if (rel != null)
                    {
                        var v = rels.Find(g => String.Equals(g.Name, rel.Name) && rel.Type == g.Type);
                        if (v != null)
                        {
                            main.user_id = v.user_id;
                        }
                    }
                }
                if ((main.user_id ?? Guid.Empty) == Guid.Empty)
                {
                    main.user_id = Guid.NewGuid();
                }
                main.Flags = UMC.Security.UserFlags.Normal;

                entity.Where.Reset().And().Equal(new Data.Entities.Account
                {
                    Type    = main.Type,
                    user_id = main.user_id
                }).Entities.IFF(e => e.Update(main) == 0, e => e.Insert(main));
            }
            else
            {
                if (main.user_id.HasValue)
                {
                    if (main.user_id.Value != om.user_id.Value)
                    {
                        entity.Where.Reset().And().Equal(new Data.Entities.Account {
                            Type = main.Type, user_id = main.user_id
                        })
                        .Entities.IFF(e => e.Update(main) == 0, e => e.Update(main));
                    }
                }
                else
                {
                    main.user_id = om.user_id;
                }
            }
            memberId = main.user_id.Value;
            foreach (var r in relations)
            {
                var mrel = rels.FindAll(g => g.Type == r.Type && memberId == g.user_id);
                if (String.IsNullOrEmpty(r.Name) == false)
                {
                    var mcards = mrel.FindAll(g => String.Equals(r.Name, g.Name, StringComparison.CurrentCultureIgnoreCase));

                    switch (mcards.Count)
                    {
                    case 0:
                        r.user_id = memberId;
                        if (mrel.Count > 0)
                        {
                            entity.Where.Reset().And().Equal(new Data.Entities.Account {
                                Type = r.Type
                            })
                            .And().In(new Data.Entities.Account
                            {
                                user_id = memberId
                            }, mids.ToArray()).Entities.Delete();
                        }
                        entity.Insert(r);
                        mrel.Add(r);
                        break;

                    default:

                        r.Flags      = UMC.Security.UserFlags.Normal;
                        r.user_id    = mcards[0].user_id;
                        r.Name       = mcards[0].Name;
                        r.user_id    = mcards[0].user_id;
                        r.ConfigData = mcards[0].ConfigData;
                        break;
                    }
                }
                else
                {
                    var m = mrel.Find(g => r.Type == g.Type && memberId == g.user_id);
                    if (m != null)
                    {
                        r.user_id    = m.user_id;
                        r.Name       = m.Name;
                        r.Flags      = m.Flags;
                        r.ConfigData = m.ConfigData;
                    }
                }
            }
        }