/// <summary> /// 登陆 /// </summary> /// <param name="parameter"></param> /// <returns></returns> public static UserState CreateState(AuthParameter parameter) { #region 检查参数 if (parameter == null || string.IsNullOrWhiteSpace(parameter.Type) || string.IsNullOrWhiteSpace(parameter.Account)) { return(null); } #endregion #region 验证身份 if (parameter.Type == AuthType.PASSWORD && !string.IsNullOrWhiteSpace(parameter.Password)) { //通过密码验证 bool validateResult = passport.Validate(parameter.Account, parameter.Password); if (!validateResult) { return(null); } } else if (parameter.Type == AuthType.CLIENT && !string.IsNullOrWhiteSpace(parameter.AppKey) && !string.IsNullOrWhiteSpace(parameter.AppIp)) { //通过信任的 App 验证 App app = App.GetApp(parameter.AppKey); if (app == null || app.Secret != parameter.AppSecret) {//如果 app 不存在或 secret 错误,则返回 null ,验证失败 return(null); } else { app.WhiteList = app.WhiteList ?? ""; var whiteList = app.WhiteList.Split(',') .Select(ip => (ip ?? "").Trim()) .ToList(); whiteList.AddRange(new List <string> { "localhost", "127.0.0.1", "::1" }); var appIp = (parameter.AppIp ?? "").Trim(); if (!whiteList.Exists(ip => !string.IsNullOrWhiteSpace(ip) && !string.IsNullOrWhiteSpace(appIp) && ip == appIp)) { return(null); } } } else { return(null); } #endregion #region 检查用户状态 var existUser = User.GetUser(parameter.Account); if (existUser == null || !existUser.IsActive) { return(null); } #endregion parameter.Device = parameter.Device ?? ""; parameter.DeviceId = parameter.DeviceId ?? ""; parameter.Ip = parameter.Ip ?? ""; //检查在同一 DeviceId 下是否已存在状态 UserState existUserState = UserState.GetState(parameter.Account, parameter.DeviceId); if (existUserState != null) { //利用当前类中 GetState 方法中写好的更新最后活动时间 return(GetState(existUserState.Token)); } //创建新用户会话状态开始 //生成Token string srcToken = StringFactory.HashBySolt(StringFactory.NewGuid()); UserState newUserState = new UserState(); newUserState.Account = parameter.Account; newUserState.LastActive = DateTime.Now; //--存储MD5后的Token,有数据库权限的人也不应该有查看别人会话密钥的权力 newUserState.Token = srcToken; //Encrypt.EncodeBySolt(srcToken); newUserState.Device = parameter.Device; newUserState.DeviceId = parameter.DeviceId ?? parameter.Ip; newUserState.Ip = parameter.Ip; newUserState.Save(); //创建用户会话状态结束 //向上层提供原Token newUserState.Token = srcToken; // return(newUserState); }
/// <summary> /// 登陆 /// </summary> /// <param name="parameter"></param> /// <returns></returns> public static UserState CreateState(AuthParameter parameter) { #region 检查参数 if (parameter == null || string.IsNullOrWhiteSpace(parameter.Type) || string.IsNullOrWhiteSpace(parameter.Account)) { return null; } #endregion #region 验证身份 if (parameter.Type == AuthType.PASSWORD && !string.IsNullOrWhiteSpace(parameter.Password)) { //通过密码验证 bool validateResult = passport.Validate(parameter.Account, parameter.Password); if (!validateResult) return null; } else if (parameter.Type == AuthType.CLIENT && !string.IsNullOrWhiteSpace(parameter.AppKey) && !string.IsNullOrWhiteSpace(parameter.AppIp)) { //通过信任的 App 验证 App app = App.GetApp(parameter.AppKey); if (app == null || app.Secret != parameter.AppSecret) {//如果 app 不存在或 secret 错误,则返回 null ,验证失败 return null; } else { app.WhiteList = app.WhiteList ?? ""; var whiteList = app.WhiteList.Split(',') .Select(ip => (ip ?? "").Trim()) .ToList(); whiteList.AddRange(new List<string> { "localhost","127.0.0.1","::1" }); var appIp = (parameter.AppIp ?? "").Trim(); if (!whiteList.Exists(ip => !string.IsNullOrWhiteSpace(ip) && !string.IsNullOrWhiteSpace(appIp) && ip == appIp)) { return null; } } } else { return null; } #endregion #region 检查用户状态 var existUser = User.GetUser(parameter.Account); if (existUser == null || !existUser.IsActive) { return null; } #endregion parameter.Device = parameter.Device ?? ""; parameter.DeviceId = parameter.DeviceId ?? ""; parameter.Ip = parameter.Ip ?? ""; //检查在同一 DeviceId 下是否已存在状态 UserState existUserState = UserState.GetState(parameter.Account, parameter.DeviceId); if (existUserState != null) { //利用当前类中 GetState 方法中写好的更新最后活动时间 return GetState(existUserState.Token); } //创建新用户会话状态开始 //生成Token string srcToken = StringFactory.HashBySolt(StringFactory.NewGuid()); UserState newUserState = new UserState(); newUserState.Account = parameter.Account; newUserState.LastActive = DateTime.Now; //--存储MD5后的Token,有数据库权限的人也不应该有查看别人会话密钥的权力 newUserState.Token = srcToken; //Encrypt.EncodeBySolt(srcToken); newUserState.Device = parameter.Device; newUserState.DeviceId = parameter.DeviceId ?? parameter.Ip; newUserState.Ip = parameter.Ip; newUserState.Save(); //创建用户会话状态结束 //向上层提供原Token newUserState.Token = srcToken; // return newUserState; }
public void Login() { AuthParameter stateParamters = new AuthParameter(); //loginParamters.Account= }
private void LoginByParameter(AuthParameter parameter) { var userState = Business.User.CreateState(parameter); if (userState != null && !string.IsNullOrWhiteSpace(userState.Token)) { string url = this.RedirectUrl + (this.RedirectUrl.Contains("?") ? "&" : "?") + "token=" + userState.Token; url += "&slot=" + this.Slot; this.PageEngine.GotoUrl(url); } else { this.PageEngine.ShowMessageBox("账号或密码错误,也可能账号已被禁用。"); } }