The "f" argument passed to the callback is a dictionary of the values that will be inserted into the record, not the existing values in the record (in fact, because an update can apply to multiple records, it would not generally be possible to have a single dictionary of existing values).
Note that updates do not involve retrieving the records from the database, so the DAL does not know the existing values of records to be updated. If you need the existing values, you will have to do a select query to retrieve the records, which you can do using the "s" argument passed to the callback (that argument is the DAL Set object used to identify the records to be updated). If you know there is only a single record to be updated, you could do:
def before_trigger_auth(s, f):
current.session.before_rkey = s.select().first().registration_key
def after_trigger_auth(s, f):
rkey = f['registration_key']