예제 #1
0
 public void UpdateAccessToken(MAccessToken user)
 {
     BeginDb(DAL =>
     {
         DAL.UpdateAccessToken(user);
     });
 }
예제 #2
0
        /// <summary>
        /// 通过appID和appsecret获取Access_token
        /// </summary>
        /// <returns></returns>
        private static MAccessToken GetAccesstokenFromWX()
        {
            try
            {
                //// 微信API地址
                string wxAPIURL = WebConfigeOpert.GetWXAPIURL();

                //// 微信平台的APPID
                string appid = WebConfigeOpert.GetWXappid();

                //// 微信平台的密码
                string secret = WebConfigeOpert.GetWXAppSecret();

                string       strUrl = wxAPIURL + "cgi-bin/token?grant_type=client_credential&appid=" + appid + "&secret=" + secret;
                MAccessToken mode   = PublicTools.HttpGetRequest <MAccessToken>(strUrl);
                LogOpert.AddWeiXinMessage("获取wxAccesstoken结果:" + mode.access_token);
                return(mode);
            }
            catch (Exception ex)
            {
                LogOpert.AddWeiXinMessage("获取wxAccesstoken异常:" + ex);
            }

            return(null);
        }
예제 #3
0
        /// <summary>
        /// 用户认证
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public AuthResult AuthUser(HttpContext context)
        {
            Endpoint endpoint = context.GetEndpoint();
            // 检查请求接口标注的特性
            bool   isPersona = endpoint?.Metadata.GetMetadata <PersonaAttribute>() != null;
            bool   isUser    = endpoint?.Metadata.GetMetadata <UserAttribute>() != null;
            string token     = context.Request.Headers["srlab_token"];

            if (!isPersona && !isUser)
            {
                return(AuthResult.DontNeed);
            }

            if (string.IsNullOrWhiteSpace(token))
            {
                if (isUser)
                {
                    return(AuthResult.AuthFail);
                }
                else
                {
                    return(AuthResult.DontNeed);
                }
            }

            // 获取当前用户信息
            UserBLL      loginBLL = context.RequestServices.GetService <UserBLL>();
            MAccessToken user     = loginBLL.GetUserByToken(token);

            if (string.IsNullOrWhiteSpace(user?.PlatformID))
            {
                if (isUser)
                {
                    return(AuthResult.AuthFail);
                }
                else
                {
                    return(AuthResult.DontNeed);
                }
            }
            // 给当前用户信息Service赋值
            MUser  currentUser = context.RequestServices.GetService <MUser>();
            string browser     = context.Request?.Headers?["User-Agent"];

            currentUser.Browser    = browser ?? "未知设备";
            currentUser.TokenID    = user.TokenID;
            currentUser.Token      = user.Token;
            currentUser.PlatformID = user.PlatformID;
            currentUser.LoginDate  = user.LoginDate;
            return(AuthResult.AuthSuccess);
        }
예제 #4
0
        /// <summary>
        /// 获取token值
        /// </summary>
        /// <returns></returns>
        public static string GetAccessToken()
        {
            //// 实现步骤
            //// 1、首先判断AccessToken是否有值
            //// 2、如果没有值,那么直接获取token
            //// 2、如果有值,那么在判断是否过期
            //// 3、如果过期,那么重新获取token
            AccessToken = GetAccesstokenFromWX();
            //// if (AccessToken == null ||
            ////     string.IsNullOrEmpty(AccessToken.access_token) ||
            ////     AccessToken.ExpiresDateTime < System.DateTime.Now)
            //// {
            ////     AccessToken = GetAccesstokenFromWX();
            //// }

            return(AccessToken.access_token);
        }
예제 #5
0
 public MAccessToken GetUserByToken(string token)
 {
     return(BeginDb(DAL =>
     {
         MAccessToken user = DAL.GetUserByToken(token);
         if (token.Equals(user?.ExToken))
         {
             DateTime create = Convert.ToDateTime(user.Token.Split("&")[1]);
             int expire = Convert.ToInt32(AppSettings.GetConfig("Refresh")) - 1;
             if (DateTime.Now - create > TimeSpan.FromMinutes(expire))
             {
                 return null;
             }
         }
         return user;
     }));
 }
예제 #6
0
        /// <summary>
        /// 刷新AccessToken
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        private string RefreshToken()
        {
            DateTime create  = Convert.ToDateTime(_currentUser.Token.Split("&")[1]);
            int      refresh = Convert.ToInt32(AppSettings.GetConfig("Refresh"));

            if (DateTime.Now - create > TimeSpan.FromMinutes(refresh))
            {
                // 过期则生成新的Token
                string       newToken = CommonUtils.CreateToken();
                MAccessToken param    = new MAccessToken
                {
                    TokenID    = _currentUser.TokenID,
                    PlatformID = _currentUser.PlatformID,
                    Browser    = _currentUser.Browser,
                    Token      = newToken,
                    ExToken    = _currentUser.Token,
                    LoginDate  = _currentUser.LoginDate
                };
                _loginBLL.UpdateAccessToken(param);
                return(newToken);
            }
            return(_currentUser.Token);
        }
예제 #7
0
 public void UpdateAccessToken(MAccessToken user)
 {
     Db.Execute($"UPDATE AccessToken SET Token = @{nameof(user.Token)}, ExToken = @{nameof(user.ExToken)}, Browser = @{nameof(user.Browser)} WHERE TokenID = @{nameof(user.TokenID)} AND PlatformID = @{nameof(user.PlatformID)}", user);
 }