How to eat user's cycles?

I want a certain shared method of my dapp to transfer some (fixed) amount of cycles from the user to my account.

What is the best way to do this?

I realize, that I can ask the user to transfer the amount of cycles from his wallet to my canister, before the method becomes successfully callable. But the amount of cycles is small, and I don’t like to bother the user to open wallet canister, login, c&p my canister’s address, etc just to transfer me this small amount.

Is there a better way?

Note that it is to be used as a protection of DoS attack (overflowing my memory with data) or draining cycles from my canister by calling this shared method repeatedly.