You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
118 lines
5.2 KiB
118 lines
5.2 KiB
using EasyBL.WebApi;
|
|
using EasyBL.WebApi.Common;
|
|
using EasyBL.WebApi.Message;
|
|
using EasyNet;
|
|
using Entity.Sugar;
|
|
using Newtonsoft.Json;
|
|
using SqlSugar.Base;
|
|
using System;
|
|
using System.Net.Http;
|
|
|
|
namespace EasyBL
|
|
{
|
|
public class BaseAuthorizeService : ServiceBase
|
|
{
|
|
#region 根据用户名获取token
|
|
|
|
/// <summary>
|
|
/// 函式名稱:GetToken
|
|
/// 函式說明:获取token
|
|
/// </summary>
|
|
/// <param name="orgId">todo: describe orgId parameter on GetToken</param>
|
|
/// <param name="userId">todo: describe userId parameter on GetToken</param>
|
|
/// <param name="pasWd">todo: describe pasWd parameter on GetToken</param>
|
|
/// <returns>
|
|
/// 回傳 rm(Object)
|
|
///</returns>
|
|
public HttpResponseMessage GetToken(string orgId, string userId, string pasWd)
|
|
{
|
|
SuccessResponseMessage srm = null;
|
|
string sError = null;
|
|
var db = SugarBase.GetIntance();
|
|
try
|
|
{
|
|
do
|
|
{
|
|
//判断参数是否合法
|
|
if (string.IsNullOrEmpty(orgId) || string.IsNullOrEmpty(userId) || string.IsNullOrEmpty(pasWd))
|
|
{
|
|
srm = new SuccessResponseMessage(null, null)
|
|
{
|
|
STATUSCODE = (int)StatusCodeEnum.ParameterError,
|
|
MSG = StatusCodeEnum.ParameterError.GetEnumText()
|
|
};
|
|
srm.DATA.Add("token", "");
|
|
return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
|
|
}
|
|
|
|
var oTicket = (OTB_SYS_TicketAuth)HttpRuntimeCache.Get(orgId + userId);
|
|
if (oTicket == null || oTicket.ExpireTime < DateTime.Now)
|
|
{
|
|
var sEncryptPwd = SecurityUtil.Encrypt(pasWd);//將輸入之密碼轉換驗證格式
|
|
var oUser = db.Queryable<OTB_SYS_Members>().Single(it => it.OrgID == orgId && it.MemberID == userId && it.Password == sEncryptPwd);
|
|
|
|
if (oUser != null)
|
|
{
|
|
oTicket = db.Queryable<OTB_SYS_TicketAuth>().Single(it => it.OrgID == orgId && it.UserID == userId);
|
|
|
|
if (oTicket == null)
|
|
{
|
|
oTicket = new OTB_SYS_TicketAuth();
|
|
}
|
|
oTicket.Token = SignExtension.CreateToken();
|
|
var iExpireTime = 240;
|
|
var sExpireTime = Common.GetSystemSetting(db, orgId, "ExpireTime");
|
|
if (!string.IsNullOrEmpty(sExpireTime))
|
|
{
|
|
iExpireTime = int.Parse(sExpireTime);
|
|
}
|
|
else
|
|
{
|
|
iExpireTime = int.Parse(WebSettingsConfig.ExpireTime);
|
|
}
|
|
oTicket.ExpireTime = DateTime.Now.AddMinutes(iExpireTime); //30分钟过期
|
|
if (oTicket.UserID != null && oTicket.OrgID != null)
|
|
{
|
|
var iRel = db.Updateable(oTicket).IgnoreColumns(it => new { it.NO })
|
|
.Where(it => it.NO == oTicket.NO).ExecuteCommand();
|
|
}
|
|
else
|
|
{
|
|
oTicket.OrgID = orgId;
|
|
oTicket.UserID = userId;
|
|
oTicket.UserName = "";
|
|
oTicket.LoginIp = "";
|
|
oTicket.LoginTime = DateTime.Now;
|
|
oTicket.CreateTime = DateTime.Now;
|
|
db.Insertable(oTicket).ExecuteCommand();
|
|
}
|
|
HttpRuntimeCache.Set(oTicket.OrgID + oTicket.UserID, oTicket, iExpireTime * 60, true);
|
|
}
|
|
else
|
|
{
|
|
oTicket = new OTB_SYS_TicketAuth();
|
|
}
|
|
}
|
|
|
|
//返回token信息
|
|
srm = new SuccessResponseMessage(null, null);
|
|
srm.DATA.Add("token", oTicket.Token);
|
|
} while (false);
|
|
}
|
|
catch (Exception ex)
|
|
{
|
|
sError = Util.GetLastExceptionMsg(ex);
|
|
srm = new SuccessResponseMessage(null, null)
|
|
{
|
|
STATUSCODE = (int)StatusCodeEnum.Error,
|
|
MSG = StatusCodeEnum.Error.GetEnumText()
|
|
};
|
|
srm.DATA.Add("token", "");
|
|
LogAndSendEmail(sError + " Param:" + orgId + "|" + userId + "|" + pasWd, ex, orgId, userId, "AuthorizeService", nameof(GetToken), "GetToken(获取token)", "", "", "");
|
|
}
|
|
return HttpResponseExtension.ToJson(JsonConvert.SerializeObject(srm));
|
|
}
|
|
|
|
#endregion 根据用户名获取token
|
|
}
|
|
}
|