Exemplo n.º 1
0
        public HttpResponseMessage ForgetPassword(ApiAuthForgetPassword request)
        {
            var response = new JsonResponse();

            if (string.IsNullOrWhiteSpace(request.Email) || !Validator.IsValidEmail(request.Email))
            {
                response.Set(new
                {
                    Success = false,
                    Message = "信箱格式錯誤,請重新輸入 !!"
                }, HttpStatusCode.BadRequest); // Http Status Code: 400

                return(response.Get());
            }

            var db   = new ChoyContext();
            var data = db.Members.Where(m => m.Email == request.Email).FirstOrDefault();

            if (data != null)
            {
                // 產生暫時密碼
                string allowedChars   = "abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ0123456789";
                int    passwordLength = 18;//密碼長度
                char[] chars          = new char[passwordLength];
                Random rd             = new Random();
                for (int i = 0; i < passwordLength; i++)
                {
                    chars[i] = allowedChars[rd.Next(0, allowedChars.Length)]; // 隨機從 allowedChars 取得一個字
                }
                string password = new string(chars);

                var env     = new Env();
                var jws     = new SimpleJws();
                var payload = new Dictionary <string, object>();
                var exp     = DateTime.Now.AddMinutes(45);

                payload.Add("MemberID", data.MemberID);
                payload.Add("Password", password);
                payload.Add("exp", TimeConverter.ToTimestamp(exp)); // 時效 45

                string token = jws.Encode(payload, env.SecretKey);
                string link  = HttpContext.Current.Request.Url.AbsoluteUri.Replace(HttpContext.Current.Request.Url.PathAndQuery, "/Home/SetRandenPassword");

                var client = new RestClient(env.SendForgetPassworadEmailAPI);
                client.Timeout = -1;
                var req = new RestRequest(Method.POST);
                req.AddHeader("Content-Type", "application/json");

                var content = new
                {
                    Recipient = data.ContactEmail,
                    NickName  = data.NickName,
                    Link      = link + $"?Token={token}",
                    Exp       = exp.ToString("MM/dd/yyyy HH:mm:ss"),
                    Password  = password,
                };

                req.AddParameter("application/json", JsonConvert.SerializeObject(content), ParameterType.RequestBody);
                IRestResponse res = client.Execute(req);
                // var dict_response = JsonConvert.DeserializeObject<Dictionary<string, object>>(res.Content);
                // HttpStatusCode statusCode = res.StatusCode;
                // int numericStatusCode = (int)statusCode;

                // if (!(bool)dict_response["Success"])
                // {
                //   response.Set(new
                //   {
                //     Success = false,
                //     Message = dict_response["Messages"]
                //   }, HttpStatusCode.InternalServerError); // Http Status Code: 500

                //   return response.Get();
                // }
            }
            // else
            // {
            //   response.Set(new
            //   {
            //     Success = false,
            //     Message = "此信箱尚未被註冊"
            //   }, HttpStatusCode.NotFound); // Http Status Code: 404

            //   return response.Get();
            // }

            response.Set(new
            {
                Success = true,
                Message = "如果此註冊信箱存在,暫時密碼已透過 Email 寄送,請至您於本站設定的聯絡 Email 收信 !!"
            }, HttpStatusCode.BadRequest); // Http Status Code: 400

            return(response.Get());
        }