コード例 #1
0
        public async Task <IHttpActionResult> chgPW([FromBody] ManageUserViewModel md)
        {
            ResultInfo r = new ResultInfo();

            try
            {
                if (ModelState.IsValid)
                {
                    if (md.NewPassword == md.OldPassword)
                    {//新密碼和舊密碼不可相同
                        r.result  = false;
                        r.message = Resources.Res.Log_Err_NewPasswordSame;
                        return(Ok(r));
                    }
                    using (var db0 = getDB0())
                    {
                        int c_id = int.Parse(this.UserId);
                        var item = await db0.Customer.FindAsync(c_id);

                        string old = HttpUtility.UrlEncode(EncryptString.desEncryptBase64(md.OldPassword));
                        if (item.c_pw != old)
                        {//舊密碼輸入錯誤
                            r.result  = false;
                            r.message = Resources.Res.Log_Err_Password;
                            return(Ok(r));
                        }
                        else
                        {
                            item.c_pw = HttpUtility.UrlEncode(EncryptString.desEncryptBase64(md.NewPassword));
                            await db0.SaveChangesAsync();

                            r.result  = true;
                            r.message = Resources.Res.Info_ChangePassword_Success;
                        }
                    }
                }
                else
                {
                    List <string> errMessage = new List <string>();
                    foreach (System.Web.Http.ModelBinding.ModelState modelState in ModelState.Values)
                    {
                        foreach (System.Web.Http.ModelBinding.ModelError error in modelState.Errors)
                        {
                            errMessage.Add(error.ErrorMessage);
                        }
                    }

                    r.message = String.Join(":", errMessage);
                    r.result  = false;
                }
            }
            catch (Exception ex)
            {
                r.result  = false;
                r.message = ex.ToString();
            }
            return(Ok(r));
        }
コード例 #2
0
        public async Task <IHttpActionResult> chgPWbyFG([FromBody] forgotChgPW md)
        {
            ResultInfo r = new ResultInfo();

            try
            {
                db0 = getDB0();
                var item = await db0.Customer.Where(x => x.email == md.Email).FirstOrDefaultAsync();

                if (md.NewPassword != md.ConfirmPassword)
                {//確認密碼和新密碼不一致
                    r.result  = false;
                    r.message = Resources.Res.Log_Err_NewPasswordNotSure;
                    return(Ok(r));
                }
                if (item == null)
                {//此用戶不存在
                    r.result  = false;
                    r.message = Resources.Res.Log_Err_NoThisUser;
                    return(Ok(r));
                }
                if (!checkCode(md.code))
                {//無效代碼
                    r.result  = false;
                    r.message = Resources.Res.Login_Err_NotValidCode;
                    return(Ok(r));
                }

                item.c_pw = HttpUtility.UrlEncode(EncryptString.desEncryptBase64(md.NewPassword));

                await db0.SaveChangesAsync();

                r.result  = true;
                r.message = Resources.Res.Info_ChangePassword_Success;
                upCheckCode(md.code);
            }
            catch (Exception ex)
            {
                r.result  = false;
                r.message = ex.ToString();
            }
            finally
            {
                db0.Dispose();
            }
            return(Ok(r));
        }
コード例 #3
0
        public IHttpActionResult forgotPWSendMail([FromUri] string email)
        {
            ResultInfo r = new ResultInfo();

            try
            {
                db0 = getDB0();

                if (!db0.Customer.Any(x => x.email == email))
                {
                    r.result  = false;
                    r.message = Resources.Res.Log_Err_EmailNoExist;
                    return(Ok(r));
                }
                //產生驗證
                ResultInfo addcode = addCheckCode(email);
                if (!addcode.result)
                {
                    r.result  = false;
                    r.message = addcode.message;
                    return(Ok(r));
                }
                ForgotPwEmail emd = new ForgotPwEmail()
                {
                    mail = email,
                    code = HttpUtility.UrlEncode(EncryptString.desEncryptBase64(addcode.no))//要加密
                };
                ResultInfo sendmail = (new EmailController()).sendForgotPWMail(emd);
                r = sendmail;
            }
            catch (Exception ex)
            {
                r.result  = false;
                r.message = ex.ToString();
            }
            finally
            {
                db0.Dispose();
            }
            return(Ok(r));
        }
コード例 #4
0
        public async Task <string> ajax_Login(LoginViewModel model)
        {
            var userManager = UserManager;

            LoginResult getLoginResult = new LoginResult();

            //if (!ModelState.IsValid)
            //{
            //    getLoginResult.result = false;
            //    getLoginResult.message = "資訊不完整";
            //    return defJSON(getLoginResult);
            //}

            #region 驗證碼檢查程序

#if DEBUG
            getLoginResult.vildate = true;
#else
            //if (string.IsNullOrEmpty(Session["CheckCode"].ToString()))
            //{
            //    Session["CheckCode"] = Guid.NewGuid();
            //    getLoginResult.result = false;
            //    getLoginResult.message = Resources.Res.Log_Err_ImgValideNotEquel;
            //    return defJSON(getLoginResult);
            //}

            //getLoginResult.vildate = Session["CheckCode"].Equals(model.validate) ? true : false;
            ValidateResponse Validate = ValidateCaptcha(model.validate, "6LexIhoTAAAAAL-SrVm8_fYcL7pTnovF4T7GozRx");//正式:6LexIhoTAAAAAL-SrVm8_fYcL7pTnovF4T7GozRx,Demo:6LfOXBcTAAAAAOqEElEieoCCTQmHAmtRfnqSS141
            getLoginResult.vildate = Validate.Success;
#endif
            if (!getLoginResult.vildate)
            {
                //Session["CheckCode"] = Guid.NewGuid(); //只要有錯先隨意產生唯一碼 以防暴力破解,新的CheckCode會在Validate產生。
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Log_Err_googleValideNotEquel;
                return(defJSON(getLoginResult));
            }
            #endregion

            #region 帳密碼檢查

            var result = await SignInManager.PasswordSignInAsync(model.account, model.password, model.rememberme, shouldLockout : false);

            if (result == SignInStatus.Failure)
            {
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Login_Err_Password;
                return(defJSON(getLoginResult));
            }

            getLoginResult.result = true;
            var item = await userManager.FindByNameAsync(model.account);

            if (isTablet)
            {
                getLoginResult.url = Url.Content(CommWebSetup.ManageDefCTR);  //是行動裝置
            }
            else
            {
                //不是行動裝置
                var get_user_roles_id = item.Roles.Select(x => x.RoleId);

                ApplicationDbContext context = ApplicationDbContext.Create();
                var roleManage          = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(context));
                var get_user_roles_name = roleManage.Roles.Where(x => get_user_roles_id.Contains(x.Id)).Select(x => x.Name);

                if (get_user_roles_name.Contains("Admins") || get_user_roles_name.Contains("Managers"))
                {
                    getLoginResult.url = Url.Content(CommWebSetup.ManageDefCTR);
                }
                else
                {
                    getLoginResult.url = Url.Content("~/Active/Sales/PersonalInfo");
                }
            }

            Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_UserName, item.UserName));
            Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_LastLogin, DateTime.Now.ToString("yyyy-MM-dd")));
            #endregion

            //語系使用
            HttpCookie WebLang = Request.Cookies[CommWebSetup.WebCookiesId + ".Lang"];
            //WebLang.Value = model.lang;
            Response.Cookies.Add(WebLang);

            try
            {
                var db = getDB0();

                var item_department = await db.Department.FindAsync(item.department_id);

                Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_DepartmentId, item.department_id.ToString()));
                //Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_DepartmentName, item_department.department_name));
                Response.Cookies.Add(new HttpCookie("user_login", Server.UrlEncode(EncryptString.desEncryptBase64("N"))));
                var item_lang = db.i_Lang
                                .Where(x => x.lang == WebLang.Value)
                                .Select(x => new { x.area })
                                .Single();

                ViewData["lang"] = item_lang.area;
                //Response.Cookies.Add(new HttpCookie(CommWebSetup.WebCookiesId + ".IsAuthorized", "OK"));//CKFinder
                Session["IsAuthorized"] = true;//ckfinder用
                db.Dispose();
            }
            catch (Exception ex)
            {
                getLoginResult.result  = false;
                getLoginResult.message = ex.Message;
                return(defJSON(getLoginResult));
            }

            return(defJSON(getLoginResult));
        }
コード例 #5
0
        public string setOrder(Purchase md)
        {
            ResultInfo r = new ResultInfo();

            r.result = true; r.hasData = true;             //預設
            HttpCookie cart = getCookie(this.CartSession); //改用cookie+json格式方式記錄購物車內容

            try
            {
                #region 送出訂單
                using (var db0 = getDB0())
                {
                    #region  產品不存在或下架
                    bool p_check = false; List <string> err = new List <string>();
                    foreach (var d in md.Deatil)
                    {
                        bool d_check = db0.ProductDetail.Any(x => x.product_detail_id == d.product_detail_id & x.product_id == d.product_id &
                                                             x.Product.stock_state == (int)IStockState.on_store_shelves & x.stock_state == (int)IStockState.on_store_shelves &
                                                             !x.Product.i_Hide);
                        if (d_check)
                        {
                            var item = db0.ProductDetail.Find(d.product_detail_id);
                            d.p_d_sn        = item.sn;                   //產品料號
                            d.p_name        = item.Product.product_name; //產品名稱
                            d.p_d_pack_name = item.pack_name;            //產品包裝
                            d.price         = item.price;                //產品價格
                            d.sub_total     = item.price * d.qty;
                        }
                        else
                        {
                            p_check = true;
                            err.Add(d.p_name);
                        }
                    }
                    if (p_check)
                    {//有產品不存在或下架
                        r.result  = false;
                        r.message = string.Format(Resources.Res.Log_Err_AddCart_Exist, String.Join("、", err.ToArray()));
                        return(defJSON(r));
                    }
                    md.total = md.Deatil.Sum(x => x.sub_total) + md.ship_fee + md.bank_charges + md.discount;
                    #endregion
                }
                #region 加入會員
                if (!this.isLogin)
                {
                    var customer = new Customer()
                    {
                        email   = md.receive_email,
                        c_pw    = Server.UrlEncode(EncryptString.desEncryptBase64(md.receive_mobile)),//預設密碼改為手機
                        c_name  = md.receive_name,
                        tel     = md.receive_tel,
                        mobile  = md.receive_mobile,
                        zip     = md.receive_zip,
                        address = md.receive_address
                    };
                    r = addCustomer(customer);
                    if (r.result)
                    {
                        md.customer_id = r.id;
                    }
                    else
                    {//會員註冊失敗
                        r.result  = false;
                        r.message = r.message;
                        return(defJSON(r));
                    }
                }

                #endregion
                r = addPurchase(md);
                if (md.receive_email != null & r.result)
                {//寄送email
                    var        open = openLogic();
                    OrderEmail emd  = new OrderEmail()
                    {
                        purchase      = md,
                        isLogin       = this.isLogin,
                        AccountName   = (string)open.getParmValue(ParmDefine.AccountName),
                        AccountNumber = (string)open.getParmValue(ParmDefine.AccountNumber),
                        BankCode      = (string)open.getParmValue(ParmDefine.BankCode),
                        BankName      = (string)open.getParmValue(ParmDefine.BankName)
                    };

                    #region 信件發送
                    ResultInfo sendmail = (new EmailController()).sendOrderMail(emd);
                    #endregion
                    if (!sendmail.result)
                    {//送信失敗
                        r.result  = true;
                        r.hasData = false;
                        r.message = sendmail.message;
                    }
                    else
                    {
                        r.message = Resources.Res.Log_Success_Order;
                    }

                    #region 刪除Cookie
                    if (cart != null)
                    {
                        cart.Expires = DateTime.Now.AddDays(-1);
                        Response.AppendCookie(cart);
                    }
                    #endregion
                }
                #endregion
            }
            catch (Exception ex)
            {
                r.result  = false;
                r.message = ex.Message;
            }
            return(defJSON(r));
        }
コード例 #6
0
        public async Task <IHttpActionResult> Post([FromBody] Customer md)
        {
            md.customer_id = GetNewId(CodeTable.Customer);

            md.i_InsertDateTime = DateTime.Now;
            md.i_UpdateDateTime = DateTime.Now;
            md.i_Lang           = "zh-TW";
            md.c_pw             = HttpUtility.UrlEncode(EncryptString.desEncryptBase64(md.mobile));//預設密碼改為手機
            var r = new ResultInfo <Customer>();

            if (!ModelState.IsValid)
            {
                r.message = ModelStateErrorPack();
                r.result  = false;
                return(Ok(r));
            }

            try
            {
                #region working
                db0 = getDB0();

                bool check_email = db0.Customer.Any(x => x.email == md.email);
                if (check_email)
                {
                    r.result  = false;
                    r.message = Resources.Res.Log_Err_EmailExist;
                    return(Ok(r));
                }

                db0.Customer.Add(md);
                await db0.SaveChangesAsync();


                RegisterEmail emd = new RegisterEmail()
                {
                    mail = md.email,
                    name = md.c_name
                };
                ResultInfo sendmail = (new EmailController()).sendRegisterMail(emd);

                r.result = true;
                r.id     = md.customer_id;
                return(Ok(r));

                #endregion
            }
            catch (DbEntityValidationException ex) //欄位驗證錯誤
            {
                r.message = getDbEntityValidationException(ex);
                r.result  = false;
                return(Ok(r));
            }
            catch (Exception ex)
            {
                r.result  = false;
                r.message = ex.Message + "\r\n" + getErrorMessage(ex);
                return(Ok(r));
            }
            finally
            {
                db0.Dispose();
            }
        }
コード例 #7
0
        public async Task <string> ajax_Login(LoginViewModel model)
        {
            var userManager = UserManager;

            LoginResult getLoginResult = new LoginResult();

            if (!ModelState.IsValid)
            {
                getLoginResult.result  = false;
                getLoginResult.message = "資訊不完整";
                return(defJSON(getLoginResult));
            }

            #region 驗證碼檢查程序
            if (string.IsNullOrEmpty(Session["CheckCode"].ToString()))
            {
                Session["CheckCode"]   = Guid.NewGuid();
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Log_Err_ImgValideNotEquel;
                return(defJSON(getLoginResult));
            }

            getLoginResult.vildate = Session["CheckCode"].Equals(model.validate) ? true : false;
#if DEBUG
            getLoginResult.vildate = true;
#endif
            if (!getLoginResult.vildate)
            {
                Session["CheckCode"]   = Guid.NewGuid(); //只要有錯先隨意產生唯一碼 以防暴力破解,新的CheckCode會在Validate產生。
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Log_Err_ImgValideNotEquel;
                return(defJSON(getLoginResult));
            }
            #endregion

            #region 帳密碼檢查
            var item = await userManager.FindAsync(model.account, model.password);

            if (item == null)
            {
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Login_Err_Password;
                return(defJSON(getLoginResult));
            }
            await SignInAsync(item, model.rememberme);

            getLoginResult.result = true;

            //SiteMaps.ReleaseSiteMap();

            if (isTablet)
            {
                getLoginResult.url = Url.Content(CommWebSetup.ManageTabletCTR); //是行動裝置
            }
            else
            {
                //不是行動裝置
                var get_user_roles_id = item.Roles.Select(x => x.RoleId);

                ApplicationDbContext context = ApplicationDbContext.Create();
                var roleManage          = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(context));
                var get_user_roles_name = roleManage.Roles.Where(x => get_user_roles_id.Contains(x.Id)).Select(x => x.Name);

                if (get_user_roles_name.Contains("Admins") || get_user_roles_name.Contains("Managers"))
                {
                    getLoginResult.url = Url.Content(CommWebSetup.ManageDefCTR);
                }
                else
                {
                    getLoginResult.url = Url.Content("~/Active/Stock");
                }
            }

            Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_UserName, item.UserName));
            Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_LastLogin, DateTime.Now.ToString()));
            #endregion

            //語系使用
            HttpCookie WebLang = Request.Cookies[CommWebSetup.WebCookiesId + ".Lang"];
            WebLang.Value = model.lang;
            Response.Cookies.Add(WebLang);

            try
            {
                var db = getDB0();

                var item_department = await db.Department.FindAsync(item.department_id);

                Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_DepartmentId, item.department_id.ToString()));
                Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_DepartmentName, item_department.department_name));
                Response.Cookies.Add(new HttpCookie("user_login", Server.UrlEncode(EncryptString.desEncryptBase64("N"))));
                var item_lang = db.i_Lang
                                .Where(x => x.lang == WebLang.Value)
                                .Select(x => new { x.area })
                                .Single();

                ViewData["lang"]        = item_lang.area;
                Session["IsAuthorized"] = true;//ckfinder用
                db.Dispose();
            }
            catch (Exception ex)
            {
                getLoginResult.result  = false;
                getLoginResult.message = ex.Message;
                return(defJSON(getLoginResult));
            }
            finally
            {
                //db0.Dispose();
            }
            return(defJSON(getLoginResult));
        }
コード例 #8
0
        public async Task <string> member_Login(LoginViewModel model)
        {
            LoginResult getLoginResult = new LoginResult();

            #region 驗證碼檢查程序

#if DEBUG
            getLoginResult.vildate = true;
#else
            #region Google驗證
            //if (!ModelState.IsValid)
            //{
            //    getLoginResult.result = false;
            //    getLoginResult.message = Resources.Res.Login_Err_Normal;
            //    return defJSON(getLoginResult);
            //}
            ValidateResponse Validate = ValidateCaptcha(model.validate);
            getLoginResult.vildate = Validate.Success;
            #endregion
#endif
            if (!getLoginResult.vildate)
            {
                //Session["CheckCode"] = Guid.NewGuid();//只要有錯先隨意產生唯一碼 以防暴力破解,新的CheckCode會在Validate產生。
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Log_Err_googleValideNotEquel;
                return(defJSON(getLoginResult));
            }
            #endregion

            try
            {
                #region 帳密碼檢查

                using (var db0 = getDB0())
                {
                    string pw       = Server.UrlEncode(EncryptString.desEncryptBase64(model.password));
                    var    get_user = await db0.Customer.Where(x => x.email == model.account& x.c_pw == pw).FirstOrDefaultAsync();

                    bool check_account = await db0.Customer.AnyAsync(x => x.email == model.account);

                    if (get_user != null)
                    {
                        #region 前台_會員登入用cookie

                        string userData                  = "Customers";
                        string encode_userid             = Server.UrlEncode(EncryptString.desEncryptBase64(get_user.customer_id.ToString()));//userid 加密
                        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, encode_userid, DateTime.Now, DateTime.Now.AddMinutes(300), false, userData, FormsAuthentication.FormsCookiePath);

                        string encTicket = FormsAuthentication.Encrypt(ticket);
                        Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

                        var cookie_loginid = new HttpCookie(CommWebSetup.LoginId, encode_userid);
                        cookie_loginid.HttpOnly = true;
                        cookie_loginid.SameSite = SameSiteMode.Lax;
                        if (Request.IsSecureConnection)
                        {
                            cookie_loginid.Secure = true;
                        }
                        Response.Cookies.Add(cookie_loginid);

                        //LoginType //N:管理者登錄 Y:一般會員登錄
                        var cookie_login_type = new HttpCookie(CommWebSetup.LoginType, Server.UrlEncode(EncryptString.desEncryptBase64("Y")));
                        cookie_login_type.HttpOnly = true;
                        cookie_login_type.SameSite = SameSiteMode.Lax;
                        if (Request.IsSecureConnection)
                        {
                            cookie_login_type.Secure = true;
                        }
                        Response.Cookies.Add(cookie_login_type);

                        #endregion
                        #region 後台_會員登入用cookie
                        Session["CheckCode"] = "jcin";

                        #endregion

                        getLoginResult.result = true;
                        string result_url = Url.Content(CommWebSetup.MemberDefCTR);

                        getLoginResult.url = result_url;
                        return(defJSON(getLoginResult));
                    }
                    else
                    {
                        if (!check_account)
                        {
                            getLoginResult.nothaveAccount = true;
                            getLoginResult.url            = Url.Content(CommWebSetup.MemberRegisterCTR);
                        }
                        getLoginResult.result  = false;
                        getLoginResult.message = Resources.Res.Login_Err_Password;//帳號或密碼錯誤 請重新輸入
                        return(defJSON(getLoginResult));
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                getLoginResult.result  = false;
                getLoginResult.message = ex.Message;
                return(defJSON(getLoginResult));
            }
        }
コード例 #9
0
        public async Task <string> ajax_NewLogin(LoginViewModel model)
        {
            var         userManager    = UserManager;
            LoginResult getLoginResult = new LoginResult();

            #region 驗證碼檢查程序

#if DEBUG
            getLoginResult.vildate = true;
#else
            #region Google驗證
            if (!ModelState.IsValid)
            {
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Login_Err_Normal;
                return(defJSON(getLoginResult));
            }
            ValidateResponse Validate = ValidateCaptcha(model.validate);
            getLoginResult.vildate = Validate.Success;
            #endregion
#endif
            if (!getLoginResult.vildate)
            {
                //Session["CheckCode"] = Guid.NewGuid();//只要有錯先隨意產生唯一碼 以防暴力破解,新的CheckCode會在Validate產生。
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Log_Err_googleValideNotEquel;
                return(defJSON(getLoginResult));
            }
            #endregion

            try
            {
                #region 帳密碼檢查

                using (var db0 = getDB0())
                {
                    ApplicationUser      get_user;
                    IEnumerable <string> get_user_roles_name;

                    //string PW_Hash = UserManager.PasswordHasher.HashPassword(model.password);
                    get_user = await userManager.FindByNameAsync(model.account);

                    if (get_user == null)
                    {
                        getLoginResult.result  = false;
                        getLoginResult.message = Resources.Res.Login_Err_Password;
                        return(defJSON(getLoginResult));
                    }
                    else
                    {
                        var result = UserManager.PasswordHasher.VerifyHashedPassword(get_user.PasswordHash, model.password);
                        if (result != PasswordVerificationResult.Success)
                        {
                            getLoginResult.result  = false;
                            getLoginResult.message = Resources.Res.Login_Err_Password;
                            return(defJSON(getLoginResult));
                        }
                    }

                    getLoginResult.result = true;
                    get_user_roles_name   = db0.AspNetUsers.FirstOrDefault(x => x.Id == get_user.Id).AspNetRoles.Select(x => x.Name);
                    //本專案目前一個帳號只對映一個role 以first role為主

                    if (get_user != null)
                    {
                        #region 前台_會員登入用cookie

                        string userData                  = get_user_roles_name.FirstOrDefault();
                        string encode_userid             = Server.UrlEncode(EncryptString.desEncryptBase64(get_user.Id));//userid 加密
                        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, encode_userid, DateTime.Now, DateTime.Now.AddMinutes(300), false, userData, FormsAuthentication.FormsCookiePath);

                        string encTicket = FormsAuthentication.Encrypt(ticket);
                        Response.Cookies.Add(new HttpCookie(FormsAuthentication.FormsCookieName, encTicket));

                        var cookie_loginid = new HttpCookie(CommWebSetup.LoginId, Server.UrlEncode(EncryptString.desEncryptBase64(get_user.UserName)));
                        cookie_loginid.HttpOnly = true;
                        cookie_loginid.SameSite = SameSiteMode.Lax;
                        if (Request.IsSecureConnection)
                        {
                            cookie_loginid.Secure = true;
                        }
                        Response.Cookies.Add(cookie_loginid);

                        //LoginType //N:管理者登錄 Y:一般會員登錄
                        var cookie_login_type = new HttpCookie(CommWebSetup.LoginType, Server.UrlEncode(EncryptString.desEncryptBase64("N")));
                        cookie_login_type.HttpOnly = true;
                        cookie_login_type.SameSite = SameSiteMode.Lax;
                        if (Request.IsSecureConnection)
                        {
                            cookie_login_type.Secure = true;
                        }
                        Response.Cookies.Add(cookie_login_type);

                        #endregion
                        #region 後台_會員登入用cookie
                        Session["CheckCode"] = "jcin";

                        #endregion

                        getLoginResult.result = true;
                        string result_url = Url.Content(CommWebSetup.ManageDefCTR);

                        getLoginResult.url = result_url;
                        return(defJSON(getLoginResult));
                    }
                    else
                    {
                        getLoginResult.result  = false;
                        getLoginResult.message = Resources.Res.Login_Err_Password;//帳號或密碼錯誤 請重新輸入
                        return(defJSON(getLoginResult));
                    }
                }
                #endregion
            }
            catch (Exception ex)
            {
                getLoginResult.result  = false;
                getLoginResult.message = ex.Message;
                return(defJSON(getLoginResult));
            }
        }
コード例 #10
0
        public async Task <string> ajax_Login(LoginViewModel model)
        {
            var userManager = UserManager;

            LoginResult getLoginResult = new LoginResult();


            #region 驗證碼檢查程序

#if DEBUG
            getLoginResult.vildate = true;
#else
            //if (string.IsNullOrEmpty(Session["CheckCode"].ToString()))
            //{
            //    Session["CheckCode"] = Guid.NewGuid();
            //    getLoginResult.result = false;
            //    getLoginResult.message = Resources.Res.Log_Err_ImgValideNotEquel;
            //    return defJSON(getLoginResult);
            //}

            //getLoginResult.vildate = Session["CheckCode"].Equals(model.validate) ? true : false;
            ValidateResponse Validate = ValidateCaptcha(model.validate);
            getLoginResult.vildate = Validate.Success;
#endif
            if (!getLoginResult.vildate)
            {
                //Session["CheckCode"] = Guid.NewGuid(); //只要有錯先隨意產生唯一碼 以防暴力破解,新的CheckCode會在Validate產生。
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Log_Err_ImgValideNotEquel;
                return(defJSON(getLoginResult));
            }
            #endregion

            #region 帳密碼檢查

            var db = getDB0();
            //var get_secretary = db.Community.Where(x => x.account == model.account && x.passwd == model.password);
            SignInStatus         result;
            ApplicationUser      item;
            IEnumerable <string> get_user_roles_id;

            result = await SignInManager.PasswordSignInAsync(model.account, model.password, model.rememberme, shouldLockout : false);

            if (result == SignInStatus.Failure)
            {
                getLoginResult.result  = false;
                getLoginResult.message = Resources.Res.Login_Err_Password;
                return(defJSON(getLoginResult));
            }

            getLoginResult.result = true;
            item = await userManager.FindByNameAsync(model.account);

            get_user_roles_id = item.Roles.Select(x => x.RoleId);


            ApplicationDbContext context = ApplicationDbContext.Create();
            var roleManage          = new RoleManager <IdentityRole>(new RoleStore <IdentityRole>(context));
            var get_user_roles_name = roleManage.Roles.Where(x => get_user_roles_id.Contains(x.Id)).Select(x => x.Name);
            getLoginResult.url = Url.Content("~/Active/CommunityNews");
            if (get_user_roles_name.Contains("Secretary"))
            {
                Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_UserName, item.UserName));
            }
            Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_LastLogin, DateTime.Now.ToString("yyyy-MM-dd")));
            #endregion

            //語系使用
            HttpCookie WebLang = Request.Cookies[CommWebSetup.WebCookiesId + ".Lang"];
            WebLang.Value    = model.lang;
            WebLang.HttpOnly = true;//避免被js隨意抓取cookie內容
            WebLang.SameSite = SameSiteMode.Lax;
            if (Request.IsSecureConnection)
            {
                WebLang.Secure = true;
            }
            Response.Cookies.Add(WebLang);

            try
            {
                var item_department = await db.Department.FindAsync(item.department_id);

                Response.Cookies.Add(new HttpCookie(CommWebSetup.Cookie_DepartmentId, item.department_id.ToString()));

                Response.Cookies.Add(new HttpCookie("user_login", Server.UrlEncode(EncryptString.desEncryptBase64("N"))));
                var item_lang = db.i_Lang
                                .Where(x => x.lang == WebLang.Value)
                                .Select(x => new { x.area })
                                .Single();

                ViewData["lang"] = item_lang.area;
                db.Dispose();
            }
            catch (Exception ex)
            {
                getLoginResult.result  = false;
                getLoginResult.message = ex.Message;
                return(defJSON(getLoginResult));
            }

            return(defJSON(getLoginResult));
        }