How do you create a link to a resource that expires

I would like to send a link to a user (via email) that expires after a period of time.

When a user takes a certain action, they are emailed a link that allows them access to a certain resource. What I want to do is make it so that the link will work for a period of time (say 48 hours) and then will no longer work. I would like the link to look like:

    http://www.mysite.com/stuff/b39a8b314588d04e23f15ceb026196c5 or     http://www.mysite.com/stuff/resourcea?b39a8b314588d04e23f15ceb026196c5

Rails would need to decrypt the url (it doesn't need to be cryptographically secure, but it should be non obvious), determine if the timeframe is still valid and serve the resource (or not).

I would rather that the timeframe be included in the link instead of having to do a db lookup.

Are there any gems/plug-ins out there for this? How would I go about creating it from scratch?

Matt

Not sure about existing gems, not having looked at this in Ruby or Rails, but having solved it in another language: you create an entry in your database with a token and a timestamp. When a user sends the token back, you check the current time against the token’s associated timestamp, and reject it if the token is unknown or the timestamp is too old. (Periodically, you can garden your database to delete any entry with an old timestamp.)

~Chris

I would use cancan.

https://github.com/ryanb/cancan/wiki/Authorizing-Controller-Actions

if valid(params[:token])

authorize! :show, @stuff

end