Browse Source

fix 會員相關API

1. SignupWithEmail API、VerifyAccount API:增加認證碼時效、認證碼(隨機產生未完成)
2. 認證碼信件內容開發
3. SETB_CMS_Member增加欄位(ExpireTime、VerifyCode)
Dev
Janie 2 years ago
parent
commit
93516d70d0
  1. 338
      EuroTran/EasyBL.WEBAPP/ShowEasy/SignupService.cs
  2. 16
      EuroTran/Entity/Sugar/SETB_CMS_Member.cs
  3. 29
      EuroTran/WebApp/Controllers/SignupController.cs

338
EuroTran/EasyBL.WEBAPP/ShowEasy/SignupService.cs

@ -29,8 +29,8 @@ namespace EasyBL.WEBAPP.SYS
//public static string SERVER_IP = "www.origtek.com";
//public static string SERVER_PORT = "9105";
//使用者以信箱註冊
public HttpResponseMessage SignupWithEmail(SETB_CMS_Member newUser)
//使用者以信箱註冊(連結)
public HttpResponseMessage SignupWithEmail_Link(SETB_CMS_Member newUser)
{
//string sMsg = null;
SuccessResponseMessage srm = null;
@ -118,6 +118,116 @@ namespace EasyBL.WEBAPP.SYS
return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
}
//使用者以信箱註冊(認證碼)
public HttpResponseMessage SignupWithEmail(SETB_CMS_Member newUser)
{
//string sMsg = null;
SuccessResponseMessage srm = null;
var db = SugarBase.GetIntance();
string sError = null;
try
{
do
{
string sAccount = newUser.Email;
string sPassword = newUser.Password;
string sEmail = newUser.Email;
string sFirstName = newUser.FirstName;
string sLastName = newUser.LastName;
//string sSubscribe = newUser.Subscribe;
string sMemberID = Guid.NewGuid().ToString(); //會員編號為GUID
string sOrgID = "TG"; //公司編號預設為TG
string sStatus = "0"; //會員狀態為未驗證(F)
string sType = "Email";
var rand = new Random(); //認證碼(隨機產生)
var sVerifyCode = new char[5]; //只要6碼
//var NumString = "0123456789"; //從這串裡面取值(只要數字)
//for(int i = 0; i < sVerifyCode.Length; i++)
//{
// sVerifyCode[i] = NumString[rand.Next(NumString.Length)];
//}
//var testCode = new String(sVerifyCode);
//System.Diagnostics.Debug.WriteLine("sVerifyCode: " + sVerifyCode);
var checkAccount = db.Queryable<SETB_CMS_Member>()
.Where(x => x.OrgID == sOrgID && x.Account == sAccount)
.Count();
if (checkAccount > 0)
{
sError = @"該帳號已註冊"; //該帳號無效
break;
}
string sEncryptPwd = SecurityUtil.Encrypt(sPassword); //密碼加密
newUser.MemberID = sMemberID;
newUser.OrgID = sOrgID;
newUser.Status = sStatus;
newUser.Password = sEncryptPwd;
newUser.Account = newUser.Email;
newUser.MemberType = sType;
newUser.VerifyCode = "123456"; //認證碼
var iExpireTime = 5; //(單位為小時,預設5分鐘到期) 1 Days = 24 hrs
var sExpireTime = Common.GetSystemSetting(db, sOrgID, @"VerifyCodeExpireTime");
if (!string.IsNullOrEmpty(sExpireTime))
{
iExpireTime = int.Parse(sExpireTime);
}
newUser.ExpireTime = DateTime.Now.AddMinutes(iExpireTime);
var iRel = db.Insertable(newUser).ExecuteCommand();
//開始寄信
var oEmail = new Emails(); //寄件人
var toEmail = new List<EmailTo>(); //收件人
var oEmailTo = new EmailTo //收件人資訊
{
ToUserID = newUser.MemberID,
ToUserName = newUser.LastName,
ToEmail = newUser.Email,
Type = "to"
};
toEmail.Add(oEmailTo);
oEmail.FromUserName = " ShowEasy 簡單平台股份有限公司";
oEmail.FromEmail = "No-Reply@showeasy.com";
oEmail.FromUserName = "【ShowEasy 會員認證】"; //取fonfig
oEmail.Title = "感謝您註冊ShowEasy"; //取fonfig
oEmail.EmailBody = VerifyAccountWithCode_Mail(newUser.FirstName, newUser.VerifyCode);
oEmail.IsCCSelf = false;
oEmail.Attachments = null;
oEmail.EmailTo = toEmail;
var bSend = new MailService(sOrgID, true).MailFactory(oEmail, out sError);
srm = new SuccessResponseMessage(null, null);
srm.DATA.Add(BLWording.REL, newUser);
} while (false);
}
catch (Exception ex)
{
sError = Util.GetLastExceptionMsg(ex);
}
finally
{
if (null != sError)
{
srm = new SuccessResponseMessage(null, null)
{
STATUSCODE = (int)StatusCodeEnum.ParameterError,
MSG = sError
};
}
}
return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
}
//重新寄送認證信
public HttpResponseMessage ReSendVerifyMail(string Email)
{
@ -143,7 +253,7 @@ namespace EasyBL.WEBAPP.SYS
toEmail.Add(oEmailTo);
oEmail.FromUserName = "【ShowEasy 會員認證】"; //取fonfig
oEmail.Title = "感謝您註冊ShowEasy"; //取fonfig
oEmail.EmailBody = VerifyAccount_Mail(Mailto.OrgID, Mailto.MemberID, Mailto.FirstName);
oEmail.EmailBody = VerifyAccountWithCode_Mail(Mailto.FirstName, Mailto.VerifyCode);
oEmail.IsCCSelf = false;
oEmail.Attachments = null;
oEmail.EmailTo = toEmail;
@ -164,8 +274,8 @@ namespace EasyBL.WEBAPP.SYS
return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
}
//會員認證
public HttpResponseMessage VerifyAccount(string OrgID, string MemberID)
//會員認證(連結)
public HttpResponseMessage VerifyAccount_Link(string OrgID, string MemberID)
{
//string sMsg = null;
SuccessResponseMessage srm = SugarBase.ExecTran(db =>
@ -262,7 +372,145 @@ namespace EasyBL.WEBAPP.SYS
return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
}
//Verify Account Mail Template
//會員認證(認證碼)
public HttpResponseMessage VerifyAccount(string OrgID, string MemberID, string Code)
{
SuccessResponseMessage srm = null;
string sError = null;
var db = SugarBase.GetIntance();
int errorStaus = 500;
try
{
do
{
var oUser = db.Queryable<SETB_CMS_Member>().Single(x => x.OrgID == OrgID && x.MemberID == MemberID);
var RightNow = DateTime.Now; //取當下時間
var Time = RightNow - oUser.ExpireTime;
TimeSpan Timec = (TimeSpan)(RightNow - oUser.ExpireTime);
if (!string.IsNullOrEmpty(Code))
{
if (Code == oUser.VerifyCode)
{
oUser.Status = "1"; //註冊成功
}
else
{
sError = @"驗證碼輸入錯誤"; //驗證碼輸入錯誤
errorStaus = (int)StatusCodeEnum.Error;
break;
}
}
var iRel = db.Updateable(oUser).ExecuteCommand();
//注冊成功后默認登錄
var ticket = new OTB_SYS_TicketAuth
{
OrgID = oUser.OrgID,
UserID = oUser.Account,
UserName = oUser.FirstName,
Token = SignExtension.CreateToken(),
// LoginIp = i_crm.ClientIP,
LoginTime = DateTime.Now
};
var iExpireTime = 240;
var sExpireTime = Common.GetSystemSetting(db, oUser.OrgID, @"ExpireTime");
if (!string.IsNullOrEmpty(sExpireTime))
{
iExpireTime = int.Parse(sExpireTime);
}
else
{
iExpireTime = int.Parse(Common.GetAppSettings(@"ExpireTime"));
}
ticket.ExpireTime = DateTime.Now.AddMinutes(iExpireTime); //30分钟过期
ticket.IsVerify = @"Y";
var oTicket = db.Queryable<OTB_SYS_TicketAuth>().Single(x => x.OrgID == OrgID && x.UserID == oUser.Account);
if (oTicket != null)
{
db.Updateable(ticket).IgnoreColumns(x => x.OutlookId).Where(x => x.NO == oTicket.NO).ExecuteCommand();
}
else
{
ticket.CreateTime = DateTime.Now;
db.Insertable(ticket).ExecuteCommand();
}
//記錄log日誌
db.Insertable(new OTB_SYS_LoginLog
{
OrgId = ticket.OrgID,
UserId = ticket.UserID,
UserName = ticket.UserName,
LoginIp = ticket.LoginIp,
LoginTime = ticket.LoginTime
}).ExecuteCommand();
HttpRuntimeCache.Set(ticket.OrgID + ticket.UserID, ticket, iExpireTime * 60, true);
HttpContext.Current.Session.Add(@"orgid", ticket.OrgID);
HttpContext.Current.Session.Add(@"userid", ticket.UserID);
HttpCookie cookie = new HttpCookie("EURO_COOKIE"); //初始化並設置Cookie的名稱
DateTime dt = DateTime.Now;
TimeSpan ts = new TimeSpan(0, 0, 1, 0, 0); //過期時間為1分鐘
cookie.Expires = dt.Add(ts); //設置過期時間
cookie.Values.Add("orgid", ticket.OrgID);
cookie.Values.Add("userid", ticket.UserID);
HttpContext.Current.Response.AppendCookie(cookie);
var strtoken = string.Format(@"orgid:{0},userid:{1},token:{2}", ticket.OrgID, ticket.UserID, ticket.Token);
//開始寄信
var sOrgID = oUser.OrgID;
var oEmail = new Emails(); //寄件人
var toEmail = new List<EmailTo>(); //收件人
var oEmailTo = new EmailTo //收件人資訊
{
ToUserID = oUser.MemberID,
ToUserName = oUser.LastName,
ToEmail = oUser.Email,
Type = "to"
};
toEmail.Add(oEmailTo);
oEmail.FromUserName = "【ShowEasy 認證成功】"; //取fonfig
oEmail.Title = "歡迎加入ShowEasy🧡"; //取fonfig
oEmail.EmailBody = CompleteRegistration_Mail(oUser.FirstName);
oEmail.IsCCSelf = false;
oEmail.Attachments = null;
oEmail.EmailTo = toEmail;
var bSend = new MailService(sOrgID, true).MailFactory(oEmail, out sError);
srm = new SuccessResponseMessage(null, null);
srm.DATA.Add("authtoken", SecurityUtil.Encrypt(strtoken));
} while (false);
}
catch (Exception ex)
{
sError = Util.GetLastExceptionMsg(ex);
System.Diagnostics.Debug.WriteLine(sError);
}
finally
{
if (null != sError)
{
srm = new SuccessResponseMessage(null, null)
{
STATUSCODE = errorStaus,
MSG = sError
};
}
}
return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
}
//Verify Account Mail Template(連結)
private string VerifyAccount_Mail(string OrgID, string MemberID, string FirstName)
{
@ -361,6 +609,84 @@ namespace EasyBL.WEBAPP.SYS
}
//Verify Account Mail Template(認證碼)
private string VerifyAccountWithCode_Mail(string FirstName, string Code)
{
StringBuilder sb = new StringBuilder();
EmailTemplate_CH mailTemplate = new EmailTemplate_CH();
var Server = Common.ConfigGetValue("", "ida:RedirectUri");
sb.Append(mailTemplate.MailHeader());
sb.Append(mailTemplate.MailCSS());
sb.Append(mailTemplate.MailShowEasyLogo());
//Email Body
sb.Append("<tr>");
sb.Append("<td style = \"padding: 0 50px 0 50px; background-color: #f8f8f8\" class=\"sm-p bar\">");
sb.Append("<table border=\"0\" cellspacing=\"0\" role=\"presentation\" style=\"width: 100%\">");
sb.Append("<tr>");
sb.Append("<td>");
sb.Append("<table border = \"0\" cellpadding = \"0\" cellspacing = \"0\" role = \"presentation\" align = \"center\"> ");
sb.Append("<tr>");
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"440\" style = \"display: block; padding-top: 30px; padding-left: 20px; padding-right: 0; font-family: arial, sans-serif; color: #000000; text-align: left;\"> ");
sb.Append("<img class=\"confirm-img\" style = \"display: block\" src = \"https://d3kpqi6h465b7i.cloudfront.net/email/verifyAccount.png \" width = \"50\" height = \"50\"/> ");
sb.Append("</td>");
sb.Append("</tr>");
//Text:VerifyYourAccount
sb.Append("<tr>");
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"440\" style = \"display: block;padding-top: 10px;padding-left: 20px;padding-right: 0;font-family: arial, sans-serif;color: #000000;text-align: left\";>");
sb.Append("<h1 class=\"title1\" style = \"font-family: 'arial', 'sans-serif'; font-weight: 700; font-size: 24px; line-height: 18px; color: #000000; margin: 0 0 0 0;\">");
sb.Append("EMAIL認證信");
sb.Append("</h1>");
sb.Append("</td>");
sb.Append("</tr>");
//Text:Hi,xxx
sb.Append("<tr>");
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"440\" style = \"display: block;padding-top: 35px;padding-left: 20px;padding-right: 0;font-family: arial, sans-serif;color: #000000;text-align: left;\">");
sb.Append("<h1 class=\"title1\" style = \"font-family: 'arial', 'sans-serif';font-weight: 700;font-size: 20px;line-height: 20px;color: #000000;margin: 0 0 0 0;\">");
sb.Append("您好 " + FirstName + ",");
sb.Append("</h1>");
sb.Append("</td>");
sb.Append("</tr>");
//Text:Welcome to....
sb.Append("<tr>");
sb.Append("<td bgcolor = \"#FEFEFE\" width = \"440\" width = \"440px\" style = \"display: block;padding-top: 20px;padding-left: 20px;padding-right: 0;color: #9c9c9c;text-align: left;\">");
sb.Append("<p style = \"font-weight: 400;font-size: 16px;line-height: 18px;letter-spacing: 0.02em;font-family: 'arial', 'sans-serif';margin: 0 0 0px;\" class=\"has-markdown\">");
sb.Append("歡迎您加入ShowEasy成為會員!<br />");
sb.Append("請使用下方的<span style=\"color: #f48800;\">認證碼</span>完成註冊並啟用您的帳戶<br />");
sb.Append("<br />");
sb.Append("提醒您,下方認證碼將於30分鐘後失效<br />");
//sb.Append("in 30 minutes.");
sb.Append("</p>");
sb.Append("</td>");
sb.Append("</tr>");
sb.Append("</tr>");
//Button:Verify my account
sb.Append("<tr>");
sb.Append("<td bgcolor = \"#FEFEFE\" style = \"display: block;padding-top: 35px;padding-bottom: 80px;font-family: arial, sans-serif;color: #232323;text-align: left;width: 460px;\"> ");
sb.Append("<table align = \"center\" border = \"0\" cellspacing = \"0\" role = \"presentation\">");
sb.Append("<tr>");
sb.Append("<td class=\"s-btn s-btn__primary\" style=\"border-radius: 16px; background: #f1f1f1;width: 440px;height: 40px;text-align: center;font-weight: bold;font-size: 30px;\">");
sb.Append(Code);
sb.Append("</td>");
sb.Append("</tr>");
sb.Append("</table>");
sb.Append("</td>");
sb.Append("</tr>");
sb.Append("</table>");
sb.Append("</td>");
sb.Append("</tr>");
sb.Append("</table>");
sb.Append("</td>");
sb.Append("</tr>");
//sb.Append(mailTemplate.MailButtom());
sb.Append(mailTemplate.MailFooter());
return sb.ToString();
}
//寄送忘記密碼信
public HttpResponseMessage SendForgotMail(string Email)
{

16
EuroTran/Entity/Sugar/SETB_CMS_Member.cs

@ -162,5 +162,21 @@ namespace Entity.Sugar
public string PhoneCode { get; set; }
public const string CN_PhoneCode = "PhoneCode";
/// <summary>
/// Desc:
/// Default:N
/// Nullable:True
/// </summary>
public DateTime? ExpireTime { get; set; }
public const string CN_ExpireTime = "ExpireTime";
/// <summary>
/// Desc:
/// Default:N
/// Nullable:True
/// </summary>
public string VerifyCode { get; set; }
public const string CN_VerifyCode = "VerifyCode";
}
}

29
EuroTran/WebApp/Controllers/SignupController.cs

@ -17,12 +17,21 @@ namespace WebApp.Controllers
public class SignupController : ApiController
{
//使用者以信箱註冊
//使用者以信箱註冊(連結)
[HttpPost]
public HttpResponseMessage SignupWithEmail([FromBody] SETB_CMS_Member dto)
public HttpResponseMessage SignupWithEmail_Link([FromBody] SETB_CMS_Member dto)
{
return new SignupService().SignupWithEmail(dto);
return new SignupService().SignupWithEmail_Link(dto);
}
//使用者以信箱註冊(認證碼)
[HttpPost]
public HttpResponseMessage SignupWithEmail([FromBody] SETB_CMS_Member dto)
{
return new SignupService().SignupWithEmail(dto);
}
@ -35,12 +44,12 @@ namespace WebApp.Controllers
}
//會員認證
//會員認證(連結)
[HttpGet]
public HttpResponseMessage VerifyAccount(string OrgID, string MemberID)
public HttpResponseMessage VerifyAccount_Link(string OrgID, string MemberID)
{
var result = new SignupService().VerifyAccount(OrgID, MemberID);
var result = new SignupService().VerifyAccount_Link(OrgID, MemberID);
var Server = Common.ConfigGetValue("", "ida:WebsiteUri");
if (result.ReasonPhrase == "OK")
@ -54,6 +63,14 @@ namespace WebApp.Controllers
//return new SignupService().VerifyAccount(OrgID, MemberID);
}
//會員認證(認證碼)
[HttpGet]
public HttpResponseMessage VerifyAccount(string OrgID, string MemberID, string Code)
{
return new SignupService().VerifyAccount(OrgID, MemberID, Code);
}
//寄送忘記密碼信
[HttpPost]
public HttpResponseMessage SendForgotMail(string Email)

Loading…
Cancel
Save