def oauth_login(self, provider, id_column, id, attrs, defaults, redirect_url=None):
        """Execute a login via oauth. If no user exists, oauth_signup() will be called
        """
        user = self.query.filter(**dict([(id_column, id)])).first()
        if not redirect_url:
            redirect_url = request.args.get('next') or url_for(self.options["redirect_after_login"])
        if self.logged_in():
            if user and user != self.current:
                if self.options["oauth_user_already_exists_message"]:
                    flash(self.options["oauth_user_already_exists_message"].format(provider=provider), "error")
                return redirect(redirect_url)
            if provider not in self.current.auth_providers:
                self.current.auth_providers.append(provider)
            current_app.features.models.save(self.current, **attrs)
        elif not user:
            return self.oauth_signup(provider, attrs, defaults, redirect_url=redirect_url)
        else:
            self.login(user, provider=provider, **attrs)
        return redirect(redirect_url)