`self.fail` and `self.error` are used a little inconsistently here. Sometimes you pass a string, other times you pass an `Error` object, sometimes the `err` object and sometimes just the `err.msg`, but I don't see a pattern to it. Is there an passport-specific pattern you were following that might have ended up inconsistently used here?