But there still is the matter of that one hour. If I am applying to a job that has a hard limit on the amount of time that I can spend on that task, and I really want that job, you can bet that if I can figure out how to arrange my schedule so that I can spend more than an hour, and if I can figure out how to make it look like I spent no more than one hour, I will. And I believe there are those candidates who may not have the time to spend on unpaid work. It may be harder than it appears on the surface: There are quite likely other commitments in the candidate's life. There may be other interviews that the candidate is facing, each with its own technical requirements, some of which may requiring learning, study, or refreshing (as may your own). There may be other job application processes that the candidate is dealing with that also have one-hour pre-interview coding tasks.
There is also the fact that the candidate has to trust that you will evaluate them fairly. I believe that a published rubric can go a long way to alleviate this particular concern.
I'm not saying I have all the answers, as I know that I do not. But I believe that asking a candidate to take "one hour" of their lives for a simple coding task, unpaid, can sometimes cost more than is obvious.
If I can ask someone to solve a question (fizzbuzz, the find method in a binary search tree, ...) in real-time, I feel it is sometimes more respectful of the candidate's time. If the candidate has the time and the inclination to code a pre-interview task, by all means, it is a great method of assessment.