Пример #1
0
        public async Task <IActionResult> SignIn([FromBody] ISignIn signIn)
        {
            try
            {
                if (signIn.UserName == null || signIn.Password == null)
                {
                    return(NotFound());
                }

                var s = _context.Users.SingleOrDefault(p => p.UserName == signIn.UserName);

                List <UserInfo> userInfo = await(from u in _context.Users
                                                 join r in _context.Roles on u.RoleId equals r.RoleId into r1
                                                 from f in r1.DefaultIfEmpty()
                                                 join p in _context.Permissions on f.RoleId equals p.RoleId into p1
                                                 from g in p1.DefaultIfEmpty()
                                                 where u.UserName == signIn.UserName
                                                 select new UserInfo
                {
                    UserId       = u.UserId,
                    UserName     = u.UserName,
                    Password     = u.Password,
                    RoleID       = u.RoleId,
                    RoleName     = f.RoleName,
                    PermissionID = g.PermissionId,
                    Form         = g.Form,
                    Viewer       = g.Viewer,
                    Creater      = g.Creater,
                    Editer       = g.Editer,
                    Printer      = g.Printer,
                    Deleter      = g.Deleter
                }).ToListAsync();

                if (userInfo == null)
                {
                    return(NotFound());
                }

                string passHash = userInfo[0].Password;

                using (MD5 md5Hash = MD5.Create())
                {
                    if (AuthController.VerifyMd5Hash(md5Hash, signIn.Password, passHash))
                    {
                        var payload = new Dictionary <string, object>();

                        payload.Add("UserId", userInfo[0].UserId);

                        payload.Add("Roles", userInfo.Select(p => new
                        {
                            RoleID   = p.RoleID,
                            RoleName = p.RoleName
                        }).Distinct().ToList());

                        payload.Add("Permissions", userInfo.Select(p => new
                        {
                            PermissionId = p.PermissionID,
                            Form         = p.Form,
                            Viewer       = p.Viewer,
                            Creater      = p.Creater,
                            Editer       = p.Editer,
                            Printer      = p.Printer,
                            Deleter      = p.Deleter
                        }).ToList());

                        var token = AuthController.JwtEncoder(payload);
                        var obj   = new Dictionary <string, object>
                        {
                            { "access_token", token }
                        };

                        var update = _context.Users.Where(p => p.UserId == userInfo[0].UserId).FirstOrDefault();
                        if (update != null)
                        {
                            update.LastLoginDate = DateTime.Now;
                        }

                        _context.SaveChanges();

                        Response.Headers.Add("Authorization", token);
                        return(Ok(obj));
                    }
                    else
                    {
                        return(StatusCode(401));
                    }
                }
            }
            catch (Exception ex)
            {
                return(StatusCode(500, ex.Message));
            }
        }