Пример #1
0
        // 사용자 본인 or 관리자 : 정보 수정 View
        public IActionResult ChangeInfo()
        {
            // 로그인 안되어있을시
            if (HttpContext.Session.GetInt32("USER_LOGIN_KEY") == null)
            {
                // 로그인 페이지로 이동
                return(RedirectToAction("Login", "Account"));
            }
            // 현재 로그인된 User의 UserNo 가져오기
            var id = int.Parse(HttpContext.Session.GetInt32("USER_LOGIN_KEY").ToString());

            if (id == 0)
            {
                return(NotFound());
            }

            using (var db = new BoardDbContext())
            {
                // 현재 로그인된 User의 UserNo로 Db에 해당하는 유저객체 가져오기
                var user = db.Users.Find(id);
                if (user != null)
                {
                    return(View(user));
                }
            }
            return(RedirectToAction("Index", "Home"));
        }
Пример #2
0
        public Repository()
        {
            var builder = new DbContextOptionsBuilder <BoardDbContext>();

            builder.UseInMemoryDatabase("chessboard");

            db = new BoardDbContext(builder.Options);
        }
Пример #3
0
        public IActionResult SignUp(User model)
        {
            // View단에 사용될 리캡챠 키값
            ViewData["ReCaptchaKey"] = _configuration.GetSection("GoogleReCaptcha:key").Value;
            // 사용자가 입력한 패스워드값(해시 전)
            var pw = Request.Form["UserPw"].ToString();

            // DB에 저장될 회원가입 당시의 날짜 , 월 , 년
            model.SignUpYear  = DateTime.Now.ToString("yyyy");
            model.SignUpMonth = DateTime.Now.ToString("MM");
            model.SignUpDay   = DateTime.Now.ToString("MM'/'dd'/'yyyy");

            byte[] salt = new byte[128 / 8];
            using (var rng = RandomNumberGenerator.Create())
            {
                rng.GetBytes(salt);
            }

            string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                       password: pw,
                                                       salt: salt,
                                                       prf: KeyDerivationPrf.HMACSHA1,
                                                       iterationCount: 10000,
                                                       numBytesRequested: 256 / 8
                                                       ));

            model.UserPw   = hashed;
            model.UserSalt = salt;

            if (ModelState.IsValid)
            {
                // 리캡챠 패스가 안됫을 경우 -> 리캡챠 통과 안됫을 경우
                if (!ReCaptchaPassed(
                        Request.Form["g-recaptcha-response"], // that's how you get it from the Request object
                        _configuration.GetSection("GoogleReCaptcha:secret").Value,
                        _logger
                        ))
                {
                    ModelState.AddModelError(string.Empty, "넌 틀렸어. 이 멍청한 로봇아! Go play some 1x1 on SFs instead."); // 에러 문구 노출
                    return(View(model));
                }
                // 리캡챠 패스됫을 경우
                using (var db = new BoardDbContext())
                {
                    db.Users.Add(model);                   // DB에 생성한 유저 객체 Add
                    db.SaveChanges();                      // DB 저장 and 체인지
                }
                return(RedirectToAction("Index", "Home")); // 회원가입 성공시 Home/Index/
            }

            return(View(model));
        }
Пример #4
0
 public AuthController(
     UserAuthContext userAuthContext,
     IUserDataProvider dataProvider,
     UserManager <IdentityUser> userManager,
     SignInManager <IdentityUser> signInManager,
     BoardDbContext boardDbContext,
     FeedDbContext feedDbContext)
 {
     this._boardDbContext  = boardDbContext;
     this._feedDbContext   = feedDbContext;
     this._userAuthContext = userAuthContext;
     this._dataProvider    = dataProvider;
     this._userManager     = userManager;
     this._signInManager   = signInManager;
 }
Пример #5
0
        /// <summary>
        /// 본인 사용자 : 내 정보 보기 View
        /// </summary>
        /// <param name="userNo"></param>
        /// <returns></returns>
        public IActionResult Detail()
        {
            // 로그인 안되어있으면 Login 페이지로 이동
            if (HttpContext.Session.GetInt32("USER_LOGIN_KEY") == null)
            {
                return(RedirectToAction("Login", "Account"));
            }
            // 현재 로그인 되어있는 유저의 No를 세션에서 가져와서
            var userNo = int.Parse(HttpContext.Session.GetInt32("USER_LOGIN_KEY").ToString());

            using (var db = new BoardDbContext())
            {
                // 세션에서 가져온 userNo와 DB에 있는 유저객체들의 userNo를 비교하여 일치하는 유저객체 하나를 가져온다.
                var user = db.Users.FirstOrDefault(u => u.UserNo.Equals(userNo));
                return(View(user));
            }
        }
Пример #6
0
 public IActionResult FindPw(FindPwViewModel model)
 {
     if (ModelState.IsValid)
     {
         using (var db = new BoardDbContext())
         {
             // 사용자가 입력한 ID && 사용자가 입력한 비밀번호 해시값과 DB에 담긴 ID와 해시값이 각각 같은 유저 객체 하나 가져오기
             var user = db.Users.FirstOrDefault(u => u.UserId.Equals(model.UserId) && u.UserEmail.Equals(model.UserEmail));
             if (user != null)
             {
                 // 해당하는 유저의 비밀번호 가져오기
                 var pw = user.UserPw.ToString();
                 ViewBag.pw = pw; // ViewBag에 가져온 비밀번호 담기
                 return(View());
             }
         }
         ModelState.AddModelError(string.Empty, "입력하신 ID 또는 Email에 일치하는 비밀번호가 없습니다."); // 사용자가 입력한 ID 또는 Email에 해당하는 유저가 없을시 Error 문구 노출
     }
     return(View(model));
 }
Пример #7
0
        public IActionResult FindId(FindIdViewModel model)
        {
            if (ModelState.IsValid)
            {
                using (var db = new BoardDbContext())
                {
                    var user = db.Users.FirstOrDefault(u => u.UserEmail.Equals(model.UserEmail)); // 사용자가 입력한 Email과 DB에 해당하는 유저중 Email이 같은 유저객체 하나 가져오기

                    if (user != null)
                    {
                        // DB에서 가져온 유저객체의 ID를 가져와서
                        var id = user.UserId.ToString();
                        ViewBag.id = id; // ViewBag에다가 id값을 넣는다
                        return(View());
                    }
                }
                ModelState.AddModelError(string.Empty, "입력하신 Email에 일치하는 ID가 없습니다."); // 사용자가 입력한 Email에 해당하는 유저가 없을시 Error 문구 노출
            }
            return(View(model));
        }
Пример #8
0
        public IActionResult ChkPw(ChkPwViewModel model)
        {
            if (HttpContext.Session.GetInt32("USER_LOGIN_KEY") == null)
            {
                return(RedirectToAction("Login", "Account"));
            }
            // 현재 로그인 중인 유저의 No값 가져오기
            var id = int.Parse(HttpContext.Session.GetInt32("USER_LOGIN_KEY").ToString());

            if (id == 0)
            {
                return(NotFound());
            }

            if (ModelState.IsValid)
            {
                using (var db = new BoardDbContext())
                {
                    // 가져온 유저의 No값으로 DB에서 해당하는 유저 객체를 가져온다
                    var user = db.Users.Find(id);
                    var pw   = user.UserPw; // DB에 저장되어있는 Password

                    string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                               password: model.UserPw, // 사용자가 입력한 Password
                                                               salt: user.UserSalt,
                                                               prf: KeyDerivationPrf.HMACSHA1,
                                                               iterationCount: 10000,
                                                               numBytesRequested: 256 / 8
                                                               ));

                    // 생성된 해시값이랑 DB에 저장되어있는 해시값이 같으면
                    if (pw.Equals(hashed))
                    {
                        return(RedirectToAction("ChangeInfo", "Account"));
                    }
                }
                ModelState.AddModelError(string.Empty, "비밀번호를 잘못 입력하셨습니다.");
            }
            return(View());
        }
Пример #9
0
        // @@@ 아이디 중복체크 - 구현완료 - ajax로 구현함! @@@
        public int IdChkForm()
        {
            // ajax로 get방식의 url에 있는 userId 값 가져오기
            var userId = Request.Query["UserId"];

            using (var db = new BoardDbContext())
            {
                var user = db.Users.ToList(); // DB에 있는 모든 유저객체 가져오기
                // 가져온 유저객체들 에서 Linq쿼리 실행
                var user_id = from u in user
                              select u;
                user_id = user_id.Where(u => u.UserId == userId); // 실행한 Linq쿼리에서 where 조건절 추가해서 ajax로 가져온 userId값과 가져온 유저객체들 중 ID가 일치하는 유저 객체 가져오기
                if (userId.Equals(""))
                {
                    return(2); // input text id창에 사용자가 입력한 값이 공백이면 return 2
                }
                else if (user_id.Count() != 0)
                {
                    return(1); // where 조건절 실행후 일치하는 유저가 1명 이상이면 return 1 -> 즉, ID중복이면.
                }
            }
            return(0); // 이외에 모든 경우엔 return 0 -> 아이디 중복이 아닌경우
        }
Пример #10
0
        public IActionResult Login(LoginViewModel model)
        {
            var pw     = Request.Form["UserPw"].ToString();                            // 사용자가 입력한 비밀번호
            var db2    = new BoardDbContext();                                         // db 연결
            var IdUser = db2.Users.FirstOrDefault(u => u.UserId.Equals(model.UserId)); // 사용자가 입력한 ID랑 일치하는 ID를 DB에서 유저 객체로 가져와서

            if (IdUser != null)                                                        // 일치하는 유저가 존재할때
            {
                // 해쉬 생성
                string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                           password: pw,                   // 사용자가 입력한 비밀번호
                                                           salt: IdUser.UserSalt,          // DB에서 가져온 유저의 Salt값
                                                           prf: KeyDerivationPrf.HMACSHA1, // 해쉬 : SHA1
                                                           iterationCount: 10000,          // 10000번 반복
                                                           numBytesRequested: 256 / 8      // 길이 32
                                                           ));

                model.UserPw = hashed;  // 사용자가 입력한 비밀번호 해시 값

                if (ModelState.IsValid) // DB에 Null 포함 값이 다 존재 한다면
                {
                    using (var db = new BoardDbContext())
                    {
                        // 사용자가 입력한 ID && 사용자가 입력한 비밀번호 해시값과 DB에 담긴 ID와 해시값이 각각 같은 유저 객체 하나 가져오기
                        var user = db.Users.FirstOrDefault(u => u.UserId.Equals(model.UserId) && u.UserPw.Equals(model.UserPw));

                        if (user != null)                                                // 유저가 존재하면
                        {
                            HttpContext.Session.SetInt32("USER_LOGIN_KEY", user.UserNo); // 세션에 유저 로그인키로 가져온 유저의 No 저장
                            return(RedirectToAction("LoginSuccess", "Home"));            // 로그인 성공 화면 출력
                        }
                    }
                }
            }
            ModelState.AddModelError(string.Empty, "사용자 ID 혹은 비밀번호가 올바르지 않습니다."); // ID 또는 비밀번호가 일치하지 않을때
            return(View(model));
        }
Пример #11
0
 public BoardsController(
     BoardDbContext boardDbContext)
 {
     this._dbContext = boardDbContext;
 }
Пример #12
0
 public BoardController(BoardDbContext ctx) => context = ctx;
Пример #13
0
        public IActionResult ChangeInfo(User user)
        {
            var db2 = new BoardDbContext();

            // 현재 로그인 상태가 아니면
            if (HttpContext.Session.GetInt32("USER_LOGIN_KEY") == null)
            {
                // 로그인 페이지로 이동
                return(RedirectToAction("Login", "Account"));
            }
            // 현재 접속중인 유저의 No를 가져와서
            var no    = int.Parse(HttpContext.Session.GetInt32("USER_LOGIN_KEY").ToString());
            var user2 = db2.Users.FirstOrDefault(u => u.UserNo.Equals(no));

            // 가져온 유저의 No와 일치하는 유저가 없으면
            if (no != user.UserNo)
            {
                return(NotFound());
            }

            // 사용자가 입력한 패스워드 가져오기
            var pw = Request.Form["UserPw"].ToString();

            if (pw != user2.UserPw) // 사용자가 입력한 비밀번호가 기존의 비밀번호와 다를경우 -> 즉 비밀번호를 변경했을때
            {
                // 16바이트 랜덤 바이트 값 가져오기 ( 솔트 )
                byte[] salt = new byte[128 / 8];
                using (var rng = RandomNumberGenerator.Create())
                {
                    // 랜덤함수 돌리고
                    rng.GetBytes(salt);
                }

                // 해시값 생성 ( 사용자가 입력한 패스워드 , 16바이트 랜덤 바이트 (솔트 값) , 암호화 형식 (SHA1) , 해시할 횟수 , 생성될 바이트 길이 ( 32 바이트 )
                string hashed = Convert.ToBase64String(KeyDerivation.Pbkdf2(
                                                           password: pw,
                                                           salt: salt,
                                                           prf: KeyDerivationPrf.HMACSHA1,
                                                           iterationCount: 10000,
                                                           numBytesRequested: 256 / 8
                                                           ));

                user.UserPw   = hashed;  // 생성된 해시값을 DB에 넣을 유저 패스워드에 값을 넣고
                user.UserSalt = salt;    // 새로 생성된 솔트값을 DB에 넣을 유저 솔트에 값을 넣고
            }
            else if (pw == user2.UserPw) // 사용자가 입력한 비밀번호가 기존의 비밀번호와 같을경우 -> 즉 비밀번호는 변경하지않고 다른 정보만 변경했을때
            {
                user.UserPw = pw;
            }


            if (ModelState.IsValid)
            {
                using (var db = new BoardDbContext())
                {
                    // DB 업데이트
                    db.Update(user);
                    // DB 저장 and 체인지
                    db.SaveChanges();
                }
                // 성공하면 정보 변경 성공 화면으로 이동
                return(RedirectToAction("ChangeMyInforSuccess", "Home"));
            }
            return(View(user));
        }