The approach that you demonstrated, where you pass the dependencies of the products to the factory, is the one that I use. In fact, these are usually the only types of dependencies that I inject into a factory.
A factory object's sole purpose in life is to create products on-demand. To fulfill this purpose, it's the factory's responsibility to ensure products have their required dependencies before releasing them into the wild.
Factories are tightly coupled to the types of its products. They have to be, since they're calling the constructors of the products.
One of the consequences of this tight coupling is that the factory is also coupled with its products' dependencies. Consequently, each dependency of a product is also a dependency of the factory, and should be injected into the factory just like any other dependency.
In fact, this is why we design loose coupling everywhere else in the system. With tight coupling, an object has knowledge of its dependency's dependencies, and their dependencies, ad nauseam. By using a factory, we're able to contain this complexity, and keep it from leaking into the rest of the system.