title: Multiple authentication options with Tornado
body: <p>Just started playing with Tornado and want to offer multiple methods of authentication. Currently my app is working fine with Google's hybrid OpenID/oAuth using tornado.auth.GoogleMixin and the unauthenticated users are automatically sent to Google's auth page.  </p>
  
  <p>If an unauthenticated user wants to use another option (ie. local auth or tornado.auth.TwitterMixin), how can I implement the logic to choose an auth mechanism within the login handler?</p>
  
  <p>I added the decorator 'tornado.web.authenticated' to all of my exposed methods, and here is the my login handler class (pretty much straight from the Tornado examples) which is currently working with Google OpenID/oAuth:</p>
  
  <pre><code>class AuthLoginHandler(BaseHandler, tornado.auth.GoogleMixin):
      @tornado.web.asynchronous
      def get(self):
  
          if self.get_argument('openid.mode', None):
              self.get_authenticated_user(self.async_callback(self._on_auth))
              return
  
          ## redirect after auth
          self.authenticate_redirect()
  
      def _on_auth(self, user):
          ## auth fail
          if not user:
              raise tornado.web.HTTPError(500, 'Google auth failed')
  
          ## auth success
          identity = self.get_argument('openid.identity', None)
  
          ## set identity in cookie
          self.set_secure_cookie('identity', tornado.escape.json_encode(identity))
          self.redirect('/')
  </code></pre>
  
  <p>Appreciate any suggestions for a solution.  Thanks</p>