Exemplo n.º 1
0
        public string CreateToken(ReactivityUser user)
        {
            var claims = new List <Claim>()
            {
                new Claim(JwtRegisteredClaimNames.NameId, user.UserName)
            };

            var signingCredentials = CreateSigningCredentials();
            var tokenDescriptor    = CreateTokenDescriptor(claims, signingCredentials);
            var token = GenerateToken(tokenDescriptor);

            return(token);
        }
        public async Task <UserViewModel> Handle(FacebookLoginQuery request, CancellationToken cancellationToken)
        {
            var userInfo = await this.fbAccessor.FacebookLoginAsync(request.AccessToken);

            if (userInfo == null)
            {
                throw new RestException(HttpStatusCode.BadRequest, new { User = "******" });
            }

            var user = await this.userManager.FindByEmailAsync(userInfo.Email);

            if (user == null)
            {
                user = new ReactivityUser
                {
                    DisplayName            = userInfo.Name,
                    Id                     = userInfo.Id,
                    Email                  = userInfo.Email,
                    UserName               = $"fb_{userInfo.Id}",
                    RefreshToken           = jwtGenerator.GenerateRefreshToken(),
                    RefreshTokenExpiryDate = DateTime.Now.AddDays(ReactivitiesAppConstants.RefreshTokenExpiryInDays)
                };

                var photo = new Photo
                {
                    Id     = $"fb_{userInfo.Id}",
                    Url    = userInfo?.Picture?.Data?.Url,
                    IsMain = true
                };

                user.Photos.Add(photo);
                var result = await this.userManager.CreateAsync(user);

                if (!result.Succeeded)
                {
                    throw new RestException(HttpStatusCode.BadRequest, new { User = "******" });
                }
            }

            return(new UserViewModel
            {
                DisplayName = user.DisplayName,
                Token = this.jwtGenerator.CreateToken(user),
                Username = user.UserName,
                Image = user.Photos.FirstOrDefault(x => x.IsMain)?.Url,
                RefreshToken = user.RefreshToken
            });
        }