public async Task <ApiResponse <TokenDto> > Create(UserPostRequest request) { if (request.Password != request.ConfirmPassword) { return(new ApiResponse <TokenDto> { Success = false, ErrorCode = ErrorCodes.PASSWORDS_DONT_MATCH }); } if (request.Name == null || request.Name.Length < 3) { return(new ApiResponse <TokenDto> { Success = false, ErrorCode = ErrorCodes.INVALID_NAME }); } if (request.Role == null) { request.Role = UserRoles.USER; } else { request.Role = request.Role.ToLowerInvariant(); } if (request.Role != UserRoles.OWNER && request.Role != UserRoles.USER) { request.Role = UserRoles.USER; } try { var auth = await _firebaseService.GetFirebaseAuthProvider().CreateUserWithEmailAndPasswordAsync(request.Email, request.Password, request.Name, false); var additionalClaims = new Dictionary <string, object>() { { Claims.ROLE, request.Role }, }; await FirebaseAuth.DefaultInstance.SetCustomUserClaimsAsync(auth.User.LocalId, additionalClaims); auth = await _firebaseService.GetFirebaseAuthProvider().SignInWithEmailAndPasswordAsync(request.Email, request.Password); return(new ApiResponse <TokenDto> { Success = true, Data = new TokenDto { Token = auth.FirebaseToken, RefreshToken = auth.RefreshToken, Name = auth.User.DisplayName, Email = auth.User.Email, UserId = auth.User.LocalId, ExpiresIn = auth.ExpiresIn, CreatedAt = auth.Created, Role = request.Role } }); }catch (Firebase.Auth.FirebaseAuthException ex) { return(new ApiResponse <TokenDto> { Success = false, ErrorCode = _firebaseService.ConvertErrorCode(ex.Reason) }); }catch { return(new ApiResponse <TokenDto> { Success = false, ErrorCode = ErrorCodes.UNKNOWN_ERROR }); } }