Esempio n. 1
0
        public async Task <LoggedUserResponse> FacebookLoginAsync(FacebookLoginRequest facebookLoginRequest)
        {
            if (string.IsNullOrEmpty(facebookLoginRequest.FacebookToken))
            {
                throw new Exception("Token is null or empty");
            }

            var facebookUser = await _facebookService.GetUserFromFacebookAsync(facebookLoginRequest.FacebookToken);

            var applicationUser = await _appDbContext.Users.SingleOrDefaultAsync(user => user.Email == facebookUser.Email);

            string token;

            if (applicationUser == null)
            {
                var user = await CreateFacebookUser(facebookUser);

                await _appDbContext.SaveChangesAsync(CancellationToken.None);

                token = await Task.Run(() => JwtAuthManager.GenerateToken(user));

                return(LoggedUser(user, token));
            }

            token = await Task.Run(() => JwtAuthManager.GenerateToken(applicationUser));

            return(LoggedUser(applicationUser, token));
        }
Esempio n. 2
0
        // Get user
        public async Task <FacebookLoginResponse> GetUser(FacebookLoginRequest model)
        {
            var result = await GetAsync <dynamic>(
                model.FacebookToken,
                model.FacebookUID,
                "fields=name,email,birthday,location,gender,picture.width(500)"
                );

            if (result == null)
            {
                throw new AppException("Invalid Facebook credentials");
            }
            if (await _context.Users.AnyAsync(u => u.FacebookUID == model.FacebookUID))
            {
                return(new FacebookLoginResponse
                {
                    Existing = true
                });
            }
            var facebookUser = new FacebookLoginResponse()
            {
                Email       = result.email ?? null,
                Name        = result.name,
                Gender      = result.gender ?? null,
                DateOfBirth = result.birthday ?? null,
                Location    = result.location != null ? result.location.name : null,
                FacebookUID = model.FacebookUID,
                Picture     = result.picture.data.url,
                Existing    = false
            };

            return(facebookUser);
        }
Esempio n. 3
0
        // Login with facebook
        public async Task <LoginResponse> FacebookLogin(FacebookLoginRequest model, string ipAddress, DeviceDetector deviceDetector)
        {
            User user = null;

            var facebookUser = await _facebookService.GetUser(model);

            if (facebookUser.Existing)
            {
                user = await _context.Users.Include(u => u.Photos).FirstOrDefaultAsync(u => u.FacebookUID == model.FacebookUID);
            }
            else
            {
                var userToCreate = _mapper.Map <User>(facebookUser);
                userToCreate.Verified = DateTime.Now;
                userToCreate.Role     = Role.User;
                userToCreate.Status   = Status.Active;
                userToCreate.Created  = DateTime.Now;

                _context.Users.Add(userToCreate);

                if (await _context.SaveChangesAsync() > 0)
                {
                    user = await _context.Users.Include(u => u.Photos).FirstOrDefaultAsync(u => u.FacebookUID == facebookUser.FacebookUID);

                    if (facebookUser.Picture != null)
                    {
                        var photo = new Photo
                        {
                            Url       = facebookUser.Picture,
                            DateAdded = DateTime.Now
                        };
                        user.Photos.Add(photo);

                        if (await _context.SaveChangesAsync() <= 0)
                        {
                            throw new AppException("Registered with Facebook successfully, but failed to add photo");
                        }
                    }
                }
            }

            var refreshToken = GenerateRefreshToken(ipAddress, deviceDetector);

            user.RefreshTokens.Add(refreshToken);

            _context.Update(user);

            await _context.SaveChangesAsync();

            var jwtToken = GenerateJwtToken(user);

            var response = _mapper.Map <LoginResponse>(user);

            response.JwtToken     = jwtToken;
            response.RefreshToken = refreshToken.Token;

            return(response);
        }
        public async Task <IActionResult> FacebookLogin([FromBody] FacebookLoginRequest model)
        {
            var dd = new DeviceDetector(Request.Headers["User-Agent"]);

            var response = await _accountService.FacebookLogin(model, IpAddress(), dd);

            Response.SetTokenCookie(response.RefreshToken);

            return(Ok(response));
        }
        public async Task <IActionResult> LoginWithFacebook(FacebookLoginRequest request)
        {
            var token = await _userService.LoginWithFacebook(request);

            if (token == "FAILED")
            {
                return(BadRequest("LOGIN FACEBOOK FAILED"));
            }
            HttpContext.Response.Headers.Add("Token", $"{token}");
            return(Ok(token));
        }
Esempio n. 6
0
        public async Task <IActionResult> FacebookLoginAsync([FromBody] FacebookLoginRequest facebookLoginRequest)
        {
            var authorizationTokens = await _userService.FacebookLoginAsync(facebookLoginRequest);

            if (authorizationTokens == null)
            {
                return(BadRequest(new { errors = "Invalid token!" }));
            }

            return(Ok(authorizationTokens));
        }
Esempio n. 7
0
        public async Task <bool> Handle(FacebookLoginRequest message, IOutputPort <LoginResponse> outputPort)
        {
            var user = await _userRepository.FindByEmail(message.Email);

            if (user == null)
            {
                user = await _userRepository.CreateUserFromFacebook(message, Convert.ToBase64String(Guid.NewGuid().ToByteArray()).Substring(0, 8));

                if (user == null)
                {
                    outputPort.Handle(new LoginResponse(new[] { new Error("facebook_login_failure", "Failed to create new user.") }));
                    return(false);
                }
            }
            outputPort.Handle(new LoginResponse(await _jwtFactory.GenerateEncodedToken(user.Id, user.UserName), true));
            return(true);
        }
Esempio n. 8
0
        public async Task <IActionResult> FacebookLogin(FacebookLoginRequest request)
        {
            if (ModelState.IsValid)
            {
                var(token, whoLoggedIn, error) = await _acc.GetOrCreateExternalLoginUser(request.Provider, request.ProviderKey, request.Email,
                                                                                         request.FirstName, request.LastName, request.Role, true, request.Picture);

                if (token != null)
                {
                    UserViewModel dto = whoLoggedIn.Convert <ApplicationUser, UserViewModel>(_mapper);
                    dto.Token = token;
                    return(Ok(dto));
                }
                return(BadRequest(new { Message = error }));
            }
            return(BadRequest(new { Errors = ModelState.Values.SelectMany(e => e.Errors).ToList() }));
        }
        protected override void beforeEach()
        {
            theUrl     = "login/test";
            theRequest = new FacebookLoginRequest();
            theSignIn  = new FacebookSignIn();

            MockFor <IFubuRequest>().Stub(x => x.Get <FacebookSignIn>()).Return(theSignIn);

            MockFor <IUrlRegistry>().Stub(x => x.UrlFor(theSignIn)).Return(theUrl);

            ClassUnderTest.Write(MimeType.Html.Value, theRequest);

            string html = MimeType.Html.ToString();

            theTag = MockFor <IOutputWriter>()
                     .GetArgumentsForCallsMadeOn(x => x.Write(Arg <string> .Is.Same(html), Arg <string> .Is.NotNull))
                     [0][1].As <string>();
        }
        public async Task <string> LoginWithFacebook(FacebookLoginRequest request)
        {
            var username       = request.userId + "facebook";
            var checkUserExist = await _userManager.FindByNameAsync(username);

            //
            if (checkUserExist != null && checkUserExist.status == ActionStatus.Deleted)
            {
                return("FAILED");
            }
            if (checkUserExist == null)
            {
                var user = new AppUser()
                {
                    displayname = request.name,
                    Email       = request.email,
                    avatar      = request.avatar,
                    UserName    = username,
                    //birthDay = DateTime.Now,
                };
                var result = await _userManager.CreateAsync(user, request.userId);

                if (result.Succeeded)
                {
                    var userRole = _context.Roles.FirstOrDefault(x => x.Name == "User");
                    await _userManager.AddToRoleAsync(user, userRole.Name);

                    var userTemp = await _userManager.FindByNameAsync(username);

                    return(await CreateToken(userTemp));
                }
                else
                {
                    return("FAILED");
                }
            }
            else
            {
                return(await CreateToken(checkUserExist));
            }
        }
Esempio n. 11
0
    private void FetchProfileCallback(IGraphResult result)
    {
        isLoggedIn = true;

        firstName = result.ResultDictionary["first_name"].ToString();
        lastName  = result.ResultDictionary["last_name"].ToString();
        email     = result.ResultDictionary["email"].ToString();
        id        = result.ResultDictionary["id"].ToString();

        profile_name.text = firstName;

        PlayerPrefs.SetString(LocalStorageUtil.Keys.firstName.ToString(), result.ResultDictionary["first_name"].ToString());
        PlayerPrefs.SetString(LocalStorageUtil.Keys.lastName.ToString(), result.ResultDictionary["last_name"].ToString());
        PlayerPrefs.SetString(LocalStorageUtil.Keys.email.ToString(), result.ResultDictionary["email"].ToString());

        DisplayProfilePanel();

        FacebookLoginRequest facebookLoginRequest = new FacebookLoginRequest();

        facebookLoginRequest.firstName = result.ResultDictionary["first_name"].ToString();
        facebookLoginRequest.lastName  = result.ResultDictionary["last_name"].ToString();
        facebookLoginRequest.email     = result.ResultDictionary["email"].ToString();
        facebookLoginRequest.id        = result.ResultDictionary["id"].ToString();
        facebookLoginRequest.photoUrl  = tempPhotoURL;

        StartCoroutine(HttpUtil.Post(HttpUtil.facebookAuthUrl, JsonUtility.ToJson(facebookLoginRequest), (response) =>
        {
            ResponseModel responseModel = new ResponseModel();
            responseModel = JsonUtility.FromJson <ResponseModel>(response.downloadHandler.text);
            if (responseModel.isSuccessful || responseModel.successful)
            {
                LocalStorageUtil.saveAuthKey(responseModel.jtwToken);
            }
            else
            {
            }
        }));
    }
Esempio n. 12
0
        public IActionResult FacebookLogin([FromForm] FacebookLoginRequest request)
        {
            var user = _context.Users.Where(x => x.Email == request.Email.Trim()).FirstOrDefault();

            //Email chưa được sử dụng trong hệ thống, đăng ký tài khoản mới
            if (user == null)
            {
                var newUser = new AppUser()
                {
                    NumberOfFiends = 0,
                    NumberOfImages = 0,
                    NumberOfLikes  = 0,
                    Email          = request.Email,
                    Role           = ERole.User,
                    FullName       = request.FullName,
                    UserName       = request.Email,
                    AvatarPath     = request.Avatar,
                    IsInfoUpdated  = false,
                    TypeAccount    = ETypeAccount.Facebook,
                    PassWord       = Guid.NewGuid().ToString()
                };

                var mailchimp = new MailChimpModel()
                {
                    Email = request.Email,
                    Name  = request.FullName
                };

                _mailchimpService.Subscribe(mailchimp);

                try
                {
                    _context.Users.Add(newUser);
                    _context.SaveChanges();
                    var response = new UserResponse(newUser, _storageService);
                    response.Token = this.GenerateJSONWebToken(newUser);
                    return(Ok(response));
                }
                catch (Exception e)
                {
                    return(BadRequest(new
                    {
                        Message = e.Message
                    }));
                }
            }
            else // Email đã có trong hệ thống, tiến hành đăng nhập
            {
                if (user.Status == EUserStatus.Inactive)
                {
                    return(BadRequest(new
                    {
                        Message = "Your account has been locked!"
                    }));
                }

                var userResponse = new UserResponse(user, _storageService);

                userResponse.Token = this.GenerateJSONWebToken(user);

                //_sessionService.SetSessionUser(user);

                return(Ok(userResponse));
            }
        }