Ejemplo n.º 1
0
        /// <summary>
        /// 更新登录凭证
        /// </summary>
        /// <param name="model"></param>
        public void Update(UserTokenDto model)
        {
            UserTokenEntity entity = _userTokenRepository.Table.Where(a => a.UserID == model.UserID).FirstOrDefault();

            entity = model.ToEntity(entity);
            _userTokenRepository.Update(entity);
        }
Ejemplo n.º 2
0
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext.ActionDescriptor.GetCustomAttributes(typeof(AllowAnonymousAttribute), true).Length != 0)
            {
                return;
            }

            HttpCookie cookie = HttpContext.Current.Request.Cookies[AuthCookieHelper.AuthCookieName];

            if (cookie != null)
            {
                FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
                string          email            = ticket.Name;
                UserTokenEntity token            = new UserTokenEntity(ticket.UserData);


                UserEntity user = new UserEntity()
                {
                    Email           = email,
                    LoggedAuthToken = token
                };

                if (_avisameSiService.IsUserLogged(user))
                {
                    var identity = new GenericIdentity(email, "AvisameSi");
                    //identity.AddClaim(new Claim("userEmail", ticket.Name));

                    HttpContext.Current.User = new GenericPrincipal(identity, null);
                    return;
                }
            }

            this.HandleUnauthorizedRequest(filterContext);
        }
Ejemplo n.º 3
0
        public async Task <IActionResult> Login(string userName, string password)
        {
            var user = await userManager.FindByNameAsync(userName);

            if (user != null)
            {
                var result = await signInManager.PasswordSignInAsync(user, password, isPersistent : false, false);

                if (result.Succeeded)
                {
                    string securityKey          = "super_long_security_key_pls_work_2137";
                    var    symmetricSecurityKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(securityKey));
                    var    signingCredentials   = new SigningCredentials(symmetricSecurityKey, SecurityAlgorithms.HmacSha256Signature);
                    var    claims = new List <Claim>
                    {
                        new Claim(ClaimTypes.NameIdentifier, user.Id)
                    };

                    var token = new JwtSecurityToken(
                        issuer: "smieszek",
                        audience: "readers",
                        signingCredentials: signingCredentials,
                        claims: claims
                        );
                    string tokenString      = new JwtSecurityTokenHandler().WriteToken(token).ToString();
                    var    resultOutput     = new UserTokenEntity(tokenString, user);
                    var    resultOutputJSON = JsonConvert.SerializeObject(resultOutput, Formatting.Indented);


                    //    JsonConvert.SerializeObject(resultOutput);
                    return(Content(resultOutputJSON));
                }
            }
            return(BadRequest("Wrong username or password."));
        }
Ejemplo n.º 4
0
    public async Task <IActionResult> SignInAsync([FromBody] Models.AccountViewModels.LoginViewModel loginModel)
    {
        Result result;
        var    signinResult = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, true, lockoutOnFailure : false);

        if (signinResult.Succeeded)
        {
            var userInfo = await _userRepository.FetchAsync(u => u.Email == loginModel.Email);

            ArgumentNullException.ThrowIfNull(userInfo);
            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, userInfo.Email),
                new Claim(JwtRegisteredClaimNames.NameId, userInfo.Id.ToString()),
            };
            var token = (TokenEntityWithRefreshToken)await _tokenService.GenerateToken(claims);

            var userToken = new UserTokenEntity
            {
                AccessToken  = token.AccessToken,
                RefreshToken = token.RefreshToken,
                ExpiresIn    = token.ExpiresIn,
                UserEmail    = userInfo.Email,
                UserId       = userInfo.Id,
                UserName     = userInfo.UserName
            };
            result = Result.Success(userToken);
        }
        else
        {
            result = Result.Fail(signinResult.IsLockedOut ? "Account locked out" : "failed to authenticate");
        }
        return(Ok(result));
    }
Ejemplo n.º 5
0
        public async Task <UserAuthentication> Handle(AuthenticateUserCommand request, CancellationToken cancellationToken)
        {
            var user = await unitOfWork.GetUser(request.Nickname);

            var hash = hasher.Generate(request.Password, user.PasswordSalt);

            if (user.PasswordHash == hash)
            {
                user.PasswordSalt  = hasher.GetSalt(UserAuthConstants.PasswordSaltLength);
                user.PasswordHash  = hasher.Generate(request.Password, user.PasswordSalt);
                user.LastLoginDate = dateTime.Now;
                await unitOfWork.UpdateAsync(user);

                var token = new UserTokenEntity()
                {
                    Token = hasher.Generate(user.LastLoginDate.ToString(), request.Nickname), Nickname = request.Nickname, CreatedDate = user.LastLoginDate, ExpirationDate = user.LastLoginDate.Add(request.TokenExpirationTime)
                };
                await unitOfWork.AddAndSaveAsync(token);

                return(new UserAuthentication()
                {
                    User = user, Token = token.Token
                });
            }

            throw new UserAuthenticationFailedException($"incorrect password");
        }
Ejemplo n.º 6
0
        private UserTokenEntity CreateLoggedUserToken(string userId)
        {
            IDatabase       redis     = _redisConn.GetDatabase();
            UserTokenEntity userToken = new UserTokenEntity();

            redis.HashSet(REDIS_USER_DATA + userId, REDIS_USER_DATA_LOGGED_AUTH, userToken.GetTokenString());
            return(userToken);
        }
Ejemplo n.º 7
0
        public async Task <IActionResult> SignInAsync([FromBody] Models.AccountViewModels.LoginViewModel loginModel)
        {
            if (!ModelState.IsValid)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            var userInfo = new SparkTodo.Models.UserAccount()
            {
                Email = loginModel.Email
            };
            var result       = new Models.JsonResponseModel <JWT.TokenEntity>();
            var signinResult = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, true, lockoutOnFailure : false);

            if (signinResult.Succeeded)
            {
                _logger.LogInformation("User logged in.");

                userInfo = await _userRepository.FetchAsync(u => u.Email == loginModel.Email);

                var claims = new Claim[]
                {
                    new Claim(JwtRegisteredClaimNames.Jti, ObjectIdGenerator.Instance.NewId()),
                    new Claim(JwtRegisteredClaimNames.Sub, userInfo.Email),
                    new Claim(JwtRegisteredClaimNames.NameId, userInfo.Id.ToString()),
                };
                var token = _tokenGenerator.GenerateToken(claims);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.Id,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                if (signinResult.IsLockedOut)
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "Account locked out", Status = Models.JsonResponseStatus.RequestError
                    };
                }
                else
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "failed to authenticate", Status = Models.JsonResponseStatus.AuthFail
                    };
                }
            }
            return(Json(result));
        }
Ejemplo n.º 8
0
        public async Task <IActionResult> SignInAsync([FromForm] Models.AccountViewModels.LoginViewModel loginModel)
        {
            if (!ModelState.IsValid)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            var userInfo = new SparkTodo.Models.UserAccount()
            {
                Email = loginModel.Email
            };
            var result = new Models.JsonResponseModel <JWT.TokenEntity>();

            Microsoft.AspNetCore.Identity.SignInResult signinResult = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, true, lockoutOnFailure : false);

            if (signinResult.Succeeded)
            {
                _logger.LogInformation(1, "User logged in.");
                var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_apiSetting.Value.SecretKey));
                var options    = new JWT.TokenOptions
                {
                    Audience           = "SparkTodoAudience",
                    Issuer             = "SparkTodo",
                    SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                };
                var token = new TokenProvider(options).GenerateToken(HttpContext, userInfo.Email);
                userInfo = await _userRepository.FetchAsync(u => u.Email == loginModel.Email);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.UserId,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "µÇ¼³É¹¦", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                if (signinResult.IsLockedOut)
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "µÇ¼ʧ°Ü£¬ÕË»§Òѱ»Ëø¶¨", Status = Models.JsonResponseStatus.RequestError
                    };
                }
                else
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Data = null, Msg = "µÇ¼ʧ°Ü", Status = Models.JsonResponseStatus.AuthFail
                    };
                }
            }
            return(Json(result));
        }
Ejemplo n.º 9
0
        public async Task AddUserTokenAsync(UserTokenEntity userToken)
        {
            if (!_configuration.Value.AllowMultipleLoginsFromTheSameUser)
            {
                await InvalidateUserTokensAsync(userToken.F_UserId);
            }
            await DeleteTokensWithSameRefreshTokenSourceAsync(userToken.F_RefreshTokenIdHashSource);

            _tokens.Add(userToken);
        }
    public async Task SetTokenAsync(string tenantId, string userId, string token)
    {
        await _tableClient.CreateIfNotExistsAsync();

        var entity = new UserTokenEntity
        {
            TenantId = tenantId,
            UserId   = userId,
            Token    = token
        };
        await _tableClient.UpsertEntityAsync(entity);
    }
Ejemplo n.º 11
0
        public JsonResult PhoneLogin([FromForm] string phone, [FromForm] string code)
        {
            DataResult dr = new DataResult();

            try
            {
                DataResult dataResult = ExaminePhoneAndCode(phone, code);

                if (dataResult.code != "200")
                {
                    return(Json(dataResult));
                }

                UserEntity userEntity = userBLL.GetByPhone(phone);

                if (userEntity == null)
                {
                    int rows = userBLL.CreateToPhone(phone);
                }

                PhoneCodeBLL phoneCodeBLL = new PhoneCodeBLL();
                phoneCodeBLL.Delete(phone);
                UserEntity user = userBLL.GetByPhone(phone);

                UserTokenBLL    userTokenBLL    = new UserTokenBLL();
                UserTokenEntity userTokenEntity = userTokenBLL.GetByUserId(user.userId);
                UserTokenEntity userToken       = new UserTokenEntity();

                if (userTokenEntity == null)
                {
                    userToken = userTokenBLL.Create(user.userId);
                }
                else
                {
                    userToken = userTokenBLL.Update(userTokenEntity);
                }

                LoginResult loginResult = new LoginResult();
                loginResult.token      = userToken.token;
                loginResult.userEntity = user;

                dr.code = "200";
                dr.data = loginResult;
            }
            catch (Exception ex)
            {
                dr.code = "999";
                dr.msg  = ex.Message;
            }

            return(Json(dr));
        }
Ejemplo n.º 12
0
        public async Task <IActionResult> SignUpAsync([FromForm] Models.AccountViewModels.RegisterViewModel regModel)
        {
            if (!ModelState.IsValid)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            var userInfo = new SparkTodo.Models.UserAccount()
            {
                UserName       = regModel.Email,
                Email          = regModel.Email,
                EmailConfirmed = true,//ĬÈϲ»ÐèÒªÑéÖ¤ÓÊÏ䣬עÊÍÒÔÆôÓÃ
                CreatedTime    = DateTime.Now
            };
            var result       = new Models.JsonResponseModel <JWT.TokenEntity>();
            var signupResult = await _userManager.CreateAsync(userInfo, regModel.Password);

            if (signupResult.Succeeded)
            {
                _logger.LogInformation(3, "User created a new account");
                var signingKey = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(_apiSetting.Value.SecretKey));
                var options    = new JWT.TokenOptions
                {
                    Audience           = "SparkTodoAudience",
                    Issuer             = "SparkTodo",
                    SigningCredentials = new SigningCredentials(signingKey, SecurityAlgorithms.HmacSha256),
                };
                var token = new TokenProvider(options).GenerateToken(HttpContext, userInfo.Email);
                userInfo = await _userRepository.FetchAsync(u => u.Email == regModel.Email);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.UserId,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "×¢²á³É¹¦", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = null, Msg = "sign up failed," + String.Join(",", signupResult.Errors.Select(e => e.Description).ToArray()), Status = Models.JsonResponseStatus.ProcessFail
                };
            }
            return(Json(result));
        }
Ejemplo n.º 13
0
        public async Task <IActionResult> SignUpAsync([FromBody] Models.AccountViewModels.RegisterViewModel regModel)
        {
            if (!ModelState.IsValid)
            {
                return(new StatusCodeResult(StatusCodes.Status400BadRequest));
            }
            var userInfo = new SparkTodo.Models.UserAccount()
            {
                UserName       = regModel.Email,
                Email          = regModel.Email,
                EmailConfirmed = true,
                CreatedTime    = DateTime.Now
            };
            var result       = new Models.JsonResponseModel <JWT.TokenEntity>();
            var signupResult = await _userManager.CreateAsync(userInfo, regModel.Password);

            if (signupResult.Succeeded)
            {
                _logger.LogInformation(3, "User created a new account");
                userInfo = await _userRepository.FetchAsync(u => u.Email == regModel.Email);

                var claims = new Claim[]
                {
                    new Claim(JwtRegisteredClaimNames.Jti, ObjectIdGenerator.Instance.NewId()),
                    new Claim(JwtRegisteredClaimNames.Sub, userInfo.Email),
                    new Claim(ClaimTypes.Name, userInfo.UserName),
                };
                var token = _tokenGenerator.GenerateToken(claims);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.Id,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = null, Msg = "sign up failed," + string.Join(",", signupResult.Errors.Select(e => e.Description).ToArray()), Status = Models.JsonResponseStatus.ProcessFail
                };
            }
            return(Json(result));
        }
Ejemplo n.º 14
0
        public JsonResult PhonePasswordLogin([FromForm] string phone, [FromForm] string password)
        {
            DataResult dr = new DataResult();

            try
            {
                if (string.IsNullOrWhiteSpace(phone) || phone.Length != 11)
                {
                    dr.code = "201";
                    dr.msg  = "手机号码错误";
                    return(Json(dr));
                }
                UserEntity user = userBLL.GetByPhoneAndPassword(phone, Helper.DataEncrypt.DataMd5(password));

                if (user == null)
                {
                    dr.code = "201";
                    dr.msg  = "手机号码或密码错误错误";
                    return(Json(dr));
                }

                UserTokenBLL    userTokenBLL    = new UserTokenBLL();
                UserTokenEntity userTokenEntity = userTokenBLL.GetByUserId(user.userId);
                UserTokenEntity userToken       = new UserTokenEntity();

                if (userTokenEntity == null)
                {
                    userToken = userTokenBLL.Create(user.userId);
                }
                else
                {
                    userToken = userTokenBLL.Update(userTokenEntity);
                }

                LoginResult loginResult = new LoginResult();
                loginResult.token      = userToken.token;
                loginResult.userEntity = user;

                dr.code = "200";
                dr.data = loginResult;
            }
            catch (Exception ex)
            {
                dr.code = "999";
                dr.msg  = ex.Message;
            }

            return(Json(dr));
        }
Ejemplo n.º 15
0
        public UserTokenEntity Login(UserEntity user)
        {
            UserTokenEntity token  = null;
            IDatabase       redis  = _redisConn.GetDatabase();
            string          userId = redis.HashGet(REDIS_USERS_LIST, user.Email);

            if (!string.IsNullOrEmpty(userId))
            {
                string storedPassword = redis.HashGet(REDIS_USER_DATA + userId, REDIS_USER_DATA_PASSWORD);
                if (user.Password == storedPassword)
                {
                    token = CreateLoggedUserToken(userId);
                }
            }
            return(token);
        }
Ejemplo n.º 16
0
        public async Task <IActionResult> SignInAsync([FromBody] Models.AccountViewModels.LoginViewModel loginModel)
        {
            JsonResponseModel result;
            var signinResult = await _signInManager.PasswordSignInAsync(loginModel.Email, loginModel.Password, true, lockoutOnFailure : false);

            if (signinResult.Succeeded)
            {
                var userInfo = await _userRepository.FetchAsync(u => u.Email == loginModel.Email);

                var claims = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Jti, GuidIdGenerator.Instance.NewId()),
                    new Claim(JwtRegisteredClaimNames.Sub, userInfo.Email),
                    new Claim(JwtRegisteredClaimNames.NameId, userInfo.Id.ToString()),
                };
                var token = _tokenGenerator.GenerateToken(claims);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.Id,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                if (signinResult.IsLockedOut)
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Msg = "Account locked out", Status = Models.JsonResponseStatus.RequestError
                    };
                }
                else
                {
                    result = new Models.JsonResponseModel <JWT.TokenEntity> {
                        Msg = "failed to authenticate", Status = Models.JsonResponseStatus.AuthFail
                    };
                }
            }
            return(Ok(result));
        }
Ejemplo n.º 17
0
        public ResultInfo <string> CheckToken(UserTokenEntity tokenEntity)
        {
            ResultInfo <string> result = new ResultInfo <string>();

            //验证token
            if (Cache.GetCheckTokenCache(tokenEntity.Userid, tokenEntity.Token))
            {
                result.ResultData = null;
                result.ResultCode = EmResultDescribe.OK;
            }
            else
            {
                result.ResultData = null;
                result.ResultCode = EmResultDescribe.会话过期;
            }
            return(result);
        }
Ejemplo n.º 18
0
        /// <summary>
        /// 根据token获取个人信息
        /// </summary>
        /// <param name="token"></param>
        /// <returns></returns>
        protected UserEntity GetUserByToken(string token)
        {
            if (!string.IsNullOrWhiteSpace(token))
            {
                UserBLL         userBLL         = new UserBLL();
                UserTokenBLL    userTokenBLL    = new UserTokenBLL();
                UserTokenEntity userTokenEntity = userTokenBLL.GetByToken(token);

                UserEntity userEntity = userBLL.GetById(userTokenEntity.userId);

                return(userEntity);
            }
            else
            {
                return(null);
            }
        }
Ejemplo n.º 19
0
        public async Task AddUserTokenAsync(UserEntity user, string refreshTokenSerial, string accessToken, string refreshTokenSourceSerial)
        {
            var now   = DateTimeOffset.Now;
            var token = new UserTokenEntity
            {
                F_UserId = user.F_Id,
                // Refresh token handles should be treated as secrets and should be stored hashed
                F_RefreshTokenIdHash       = _securityService.GetSha256Hash(refreshTokenSerial),
                F_RefreshTokenIdHashSource = string.IsNullOrWhiteSpace(refreshTokenSourceSerial) ?
                                             null : _securityService.GetSha256Hash(refreshTokenSourceSerial),
                F_AccessTokenHash             = _securityService.GetSha256Hash(accessToken),
                F_RefreshTokenExpiresDateTime = now.AddMinutes(_configuration.Value.RefreshTokenExpirationMinutes),
                F_AccessTokenExpiresDateTime  = now.AddMinutes(_configuration.Value.AccessTokenExpirationMinutes)
            };

            await AddUserTokenAsync(token);
        }
Ejemplo n.º 20
0
        public async Task <IActionResult> SignUpAsync([FromBody] Models.AccountViewModels.RegisterViewModel regModel)
        {
            var userInfo = new SparkTodo.Models.UserAccount()
            {
                UserName       = regModel.Email,
                Email          = regModel.Email,
                EmailConfirmed = true,
                CreatedTime    = DateTime.UtcNow
            };
            JsonResponseModel <TokenEntity> result;
            var signUpResult = await _userManager.CreateAsync(userInfo, regModel.Password);

            if (signUpResult.Succeeded)
            {
                userInfo = await _userRepository.FetchAsync(u => u.Email == regModel.Email);

                var claims = new[]
                {
                    new Claim(JwtRegisteredClaimNames.Jti, GuidIdGenerator.Instance.NewId()),
                    new Claim(JwtRegisteredClaimNames.Sub, userInfo.Email),
                    new Claim(JwtRegisteredClaimNames.NameId, userInfo.Id.ToString()),
                };
                var token = _tokenGenerator.GenerateToken(claims);

                var userToken = new UserTokenEntity
                {
                    AccessToken = token.AccessToken,
                    ExpiresIn   = token.ExpiresIn,
                    UserEmail   = userInfo.Email,
                    UserId      = userInfo.Id,
                    UserName    = userInfo.UserName
                };
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Data = userToken, Msg = "", Status = Models.JsonResponseStatus.Success
                };
            }
            else
            {
                result = new Models.JsonResponseModel <JWT.TokenEntity> {
                    Msg = "sign up failed," + string.Join(",", signUpResult.Errors.Select(e => e.Description).ToArray()), Status = Models.JsonResponseStatus.ProcessFail
                };
            }
            return(Ok(result));
        }
Ejemplo n.º 21
0
        public async Task <long> AddAsync(long userId, string token)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                UserTokenEntity userToken = await dbc.GetAll <UserTokenEntity>().SingleOrDefaultAsync(u => u.UserId == userId);

                if (userToken != null)
                {
                    return(-1);
                }
                UserTokenEntity Token = new UserTokenEntity();
                Token.UserId = userId;
                Token.Token  = token;
                dbc.UserTokens.Add(Token);
                await dbc.SaveChangesAsync();

                return(Token.Id);
            }
        }
Ejemplo n.º 22
0
        public UserTokenEntity RegisterUser(UserEntity user)
        {
            IDatabase redis  = _redisConn.GetDatabase();
            long      userId = redis.StringIncrement(REDIS_SEQUENCE_USERS_ID);

            redis.HashSet(REDIS_USERS_LIST, user.Email, userId.ToString());
            HashEntry[] hashEntryArray = new HashEntry[] {
                new HashEntry(REDIS_USER_DATA_EMAIL, user.Email),
                new HashEntry(REDIS_USER_DATA_PASSWORD, user.Password)
            };

            redis.HashSet(REDIS_USER_DATA + userId, hashEntryArray);

            redis.SortedSetAdd(REDIS_USERS_BY_CREATIONDATE, user.Email, DateTime.Now.Ticks);

            UserTokenEntity token = CreateLoggedUserToken(userId.ToString());

            return(token);
        }
Ejemplo n.º 23
0
    public async Task <IActionResult> SignUpAsync([FromBody] Models.AccountViewModels.RegisterViewModel regModel)
    {
        var userInfo = new UserAccount()
        {
            UserName       = regModel.Email,
            Email          = regModel.Email,
            EmailConfirmed = true,
            CreatedTime    = DateTime.UtcNow
        };
        Result <UserTokenEntity> result;
        var signUpResult = await _userManager.CreateAsync(userInfo, regModel.Password);

        if (signUpResult.Succeeded)
        {
            userInfo = await _userRepository.FetchAsync(u => u.Email == regModel.Email);

            ArgumentNullException.ThrowIfNull(userInfo);
            var claims = new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, userInfo.Email),
                new Claim(JwtRegisteredClaimNames.NameId, userInfo.Id.ToString()),
            };
            var token = (TokenEntityWithRefreshToken)await _tokenService.GenerateToken(claims);

            var userToken = new UserTokenEntity
            {
                AccessToken  = token.AccessToken,
                ExpiresIn    = token.ExpiresIn,
                RefreshToken = token.RefreshToken,
                UserEmail    = userInfo.Email,
                UserId       = userInfo.Id,
                UserName     = userInfo.UserName
            };
            result = Result.Success(userToken);
        }
        else
        {
            result = Result.Fail <UserTokenEntity>(
                $"sign up failed,{string.Join(",", signUpResult.Errors.Select(e => e.Description).ToArray())}");
        }
        return(Ok(result));
    }
Ejemplo n.º 24
0
        public ActionResult Login(string email, string password)
        {
            IAccountRepository accountRepository = new AccountRepository(MvcApplication.RedisConn);
            AccountService     service           = new AccountService(accountRepository);
            UserEntity         user = new UserEntity()
            {
                Email    = email,
                Password = password
            };
            UserTokenEntity token = service.Login(user);

            if (token != null)
            {
                AuthCookieHelper.CreateAuthCookie(email, token.GetTokenString(), false);
                return(RedirectToAction("Index", "Home"));
            }
            else
            {
                return(RedirectToAction("Register"));
            }
        }
Ejemplo n.º 25
0
        public async Task <long> UpdateAsync(long userId, string token)
        {
            using (MyDbContext dbc = new MyDbContext())
            {
                UserTokenEntity userToken = await dbc.GetAll <UserTokenEntity>().SingleOrDefaultAsync(u => u.UserId == userId);

                if (userToken != null)
                {
                    userToken.Token = token;
                }
                else
                {
                    UserTokenEntity entity = new UserTokenEntity();
                    entity.UserId = userId;
                    entity.Token  = token;
                    dbc.UserTokens.Add(entity);
                }
                await dbc.SaveChangesAsync();

                return(1);
            }
        }
Ejemplo n.º 26
0
        public ActionResult Register(string email, string password, string passwordRepeat)
        {
            try
            {
                IAccountRepository accountRepository = new AccountRepository(MvcApplication.RedisConn);
                AccountService     service           = new AccountService(accountRepository);

                UserEntity user = new UserEntity()
                {
                    Email    = email,
                    Password = password
                };

                UserTokenEntity token = service.Register(user);
                AuthCookieHelper.CreateAuthCookie(email, token.GetTokenString(), false);

                return(RedirectToAction("Index", "Home"));
            }
            catch
            {
                throw;
                //return RedirectToAction("Error500", "Error");
            }
        }
Ejemplo n.º 27
0
 public static UserTokenEntity ToEntity(this UserTokenDto model, UserTokenEntity destination)
 {
     return(model.MapTo(destination));
 }
Ejemplo n.º 28
0
        /// <summary>
        /// 插入登录凭证
        /// </summary>
        /// <param name="model"></param>
        public void Insert(UserTokenDto model)
        {
            UserTokenEntity entity = model.ToEntity();

            _userTokenRepository.Insert(entity);
        }
Ejemplo n.º 29
0
 public static UserTokenDto ToModel(this UserTokenEntity entity)
 {
     return(entity.MapTo <UserTokenEntity, UserTokenDto>());
 }
Ejemplo n.º 30
0
        public JsonResult WxLogin([FromForm] string code)
        {
            DataResult dr = new DataResult();

            try
            {
                if (string.IsNullOrWhiteSpace(code))
                {
                    dr.code = "201";
                    dr.msg  = "参数错误";
                    return(Json(dr));
                }

                //UserEntity userEntity = userBLL.GetById(10007);
                //userEntity.account = code;
                //userBLL.ActionDal.ActionDBAccess.Updateable(userEntity).ExecuteCommand();

                AccessTokenEntity accessTokenEntity = WeChat.LoginHelper.GetAccessToken(code);

                if (!string.IsNullOrWhiteSpace(accessTokenEntity.errcode))
                {
                    dr.code = "201";
                    dr.msg  = "获取AccessToken失败";
                    return(Json(dr));
                }

                AccessTokenEntity accessToken = WeChat.LoginHelper.GetRefreshToken(accessTokenEntity.refresh_token);

                if (!string.IsNullOrWhiteSpace(accessToken.errcode))
                {
                    dr.code = "201";
                    dr.msg  = "获取RefreshToken失败";
                    return(Json(dr));
                }

                AccessTokenEntity tokenEntity = WeChat.LoginHelper.SetExpiresIn(accessToken);

                if (string.IsNullOrWhiteSpace(tokenEntity.access_token) || string.IsNullOrWhiteSpace(tokenEntity.openid))
                {
                    dr.code = "201";
                    dr.msg  = "续期失败";
                    return(Json(dr));
                }

                WeChat.WxUserEntity wxUserEntity = WeChat.LoginHelper.GetWxUser(tokenEntity.access_token, tokenEntity.openid);

                if (string.IsNullOrWhiteSpace(wxUserEntity.openid) || !string.IsNullOrWhiteSpace(wxUserEntity.errcode))
                {
                    dr.code = "201";
                    dr.msg  = "获取用户信息失败";
                    return(Json(dr));
                }

                WxUserBLL wxUserBLL = new WxUserBLL();

                Entity.WxUserEntity wxUser = wxUserBLL.GetByOpenId(wxUserEntity.openid);

                if (wxUser == null)
                {
                    int rows = CreateWxUser(wxUserEntity);
                    if (rows > 0)
                    {
                        dr.code = "201";
                        dr.msg  = "创建用户失败";
                        return(Json(dr));
                    }
                }

                Entity.WxUserEntity wx = wxUserBLL.GetByOpenId(wxUserEntity.openid);

                UserEntity user = userBLL.GetById(wx.userId);

                UserTokenBLL    userTokenBLL    = new UserTokenBLL();
                UserTokenEntity userTokenEntity = userTokenBLL.GetByUserId(user.userId);
                UserTokenEntity userToken       = new UserTokenEntity();

                if (userTokenEntity == null)
                {
                    userToken = userTokenBLL.Create(user.userId);
                }
                else
                {
                    userToken = userTokenBLL.Update(userTokenEntity);
                }

                LoginResult loginResult = new LoginResult();
                loginResult.token      = userToken.token;
                loginResult.userEntity = user;

                dr.code = "200";
                dr.data = loginResult;
            }
            catch (Exception ex)
            {
                dr.code = "999";
                dr.msg  = ex.Message;
            }

            return(Json(dr));
        }