/// <summary>
        /// Validation UserName & Password
        /// </summary>
        /// <param name="userName"></param>
        /// <param name="password"></param>
        /// <returns></returns>
        public string Login(LoginDto loginDto, string SigningSecret, string ExpiryDuration)
        {
            var tokenString = "";
            var user        = _context.Users.Find(u => u.UserName == loginDto.UserName).SingleOrDefault();

            if (user == null)
            {
                return(null);
            }
            else
            {
                if (SecurityBCryptMethod.VerifyPassword(loginDto.Password, user.Password))
                {
                    // generate token
                    tokenString = SecurityTokenMethod.JWTAuthenticationToken(SigningSecret, ExpiryDuration, user);
                    //update token in user
                    user.AccessToken = tokenString;
                    user.UpdatedDate = DateTime.Now;
                    _context.Users.ReplaceOneAsync(filter: u => u.Id == user.Id, replacement: user);
                    //insert token
                    var token = new Token();
                    token.UserId      = user.Id;
                    token.TokenKey    = tokenString;
                    token.CreatedDate = DateTime.Now;
                    token.CreatedBy   = user.UserName;// user login
                    _context.Tokens.InsertOneAsync(token);
                }
                else
                {
                    return(null);
                }
            }
            return(tokenString);
        }
        /// <summary>
        /// IsAuthenticated
        /// </summary>
        /// <param name="LoginDto"></param>
        /// <returns></returns>
        public User IsAuthenticated(LoginDto loginDto, string SigningSecret, string ExpiryDuration)
        {
            var user = new User();

            try
            {
                // check user
                user = _context.Users.Find(u => u.UserName == loginDto.UserName).SingleOrDefault();
                //check pass
                if (user != null)
                {
                    if (SecurityBCryptMethod.VerifyPassword(loginDto.Password, user.Password))
                    {
                        if (user.AccessToken != null)
                        {
                            // update token user when Expires
                        }
                        else
                        {
                            // generate token
                            var tokenString     = SecurityTokenMethod.JWTAuthenticationToken(SigningSecret, ExpiryDuration, user);
                            var userUpdateToken = new User();
                            user.Id          = user.Id;
                            user.AccessToken = tokenString;
                            user.UpdatedDate = DateTime.Now;
                            ReplaceOneResult updateResult = _context.Users.ReplaceOne(filter: u => u.Id == user.Id, replacement: user);

                            if (updateResult.IsAcknowledged && updateResult.ModifiedCount > 0)
                            {
                                //insert token
                                var token = new Token();
                                token.UserId      = user.Id;
                                token.TokenKey    = tokenString;
                                token.CreatedDate = DateTime.Now;
                                token.CreatedBy   = user.UserName;// user login
                                _context.Tokens.InsertOneAsync(token);
                            }
                        }
                    }
                    else
                    {
                        user = null;
                    }
                }

                return(user);
            }
            catch (Exception)
            {
            }
            return(user);
        }