As DrMoishe Pippik mentioned in his answer, the usual solution is PWM, which permits you to control average motor current very efficiently. The downside is the relatively complex circuit to produce the PWM signal, and switching elements.
You shouldn't dismiss the idea of using a passive element, like a resistor, to diminish power delivered to the motor. Sure, there's an inherent inefficiency to this approach (since power is necessarily dissipated in the resistor), but if you used a series resistance to reduce battery current by a factor of ten, for example, you reduce overall power drawn from the battery by that same factor, irrespective of how you actually achieve it.
The biggest problem you face, regardless of your chosen solution, will be getting the motor to start with diminished drive current. It must overcome static friction to begin spinning in the first place. Presumably there's some load connected to the motor shaft, which will worsen this problem. Usually, when a motor starts, it has minimum coil resistance, passes maximum current, enough to get the motor running. As it speeds up, back EMF increases the effective coil resistance, reducing the current required to maintain speed.
A naive system to limit motor current will be designed to set the maximum "running" current, but that same constraint will also applied during start-up, which is likely to prevent the motor from even beginning to turn, unless static friction is negligible (which it probably won't be).
Therefore whatever solution you employ will also need to pass whatever current the motor requires to get started, and then some time later introduce a throttle on current.
This could be as simple as a capacitor in parallel with the throttling resistor, which has no impedance initially, but increases its effective resistance as it charges (left here):

simulate this circuit – Schematic created using CircuitLab
On the right I use a transistor to bypass the throttling resistor, R3, for about 200ms. This has the advantage of using a smaller timing capacitor, and bypassing in a more digital "on or off" manner.
If you go with a PWM solution to limit average current, you will need to employ a digital means of disabling throttling for some period while the motor gets up to speed (ie. 100% duty cycle for a quarter of a second or so, then down to, say, 25%). This would be really easy to accomplish using a microcontroller, such as an Arduino.
Whatever your PWM implementation, you'll need a transistor to switch the motor on or off, given the relatively weak digital signal from the PWM system, and this can be combined with a "one-shot" (single, monostable pulse) at power-on, using a similar resistor+capacitor technique:

simulate this circuit
This is almost certainly not the best way, but you get the idea: D1 and D2 "OR" the PWM signal and the start-up pulse (from R1 and C1) together, so the motor is powered when either is high. I used a MOSFET here because it solves many of the problems with BJTs (significant base current, low current gain, significant \$V_{CE}\$ and so on). The voltage across the motor might resemble this:

You can use whatever astable multivibrator you want to produce the PWM waveform, such as the classic astable 555.