Criando novas estratégias com OmniAuth

Postado em 15. jul, 2011 por Anderson Leite em Ruby

Diversos sistemas espalhados pela web hoje tem seu login facilitado através de um outro sistema que o usúario utilize, como Facebook e Twitter. O Agendatech é um exemplo onde fazemos o login através da conta de Twitter do usuário.

O protocolo utilizado para isso é o OAuth, que possui uma extensa documentação. Para facilitar o trabalho, em Ruby temos a gem OmniAuth, que torna muito simples o procedimento de login através de uma dessas contas do usuário, que são normalmente chamadas de providers.

OmniAuth

O OmniAuth assume que o processo de autorização possui duas fases principais: request e callback. A fase de request é a etapa onde o provider é chamado. Esse provider autentica o usuário e pede a permissão do usuário para compartilhar os dados na aplicação. O provider então executa o callback com as informações necessárias.

Configurando uma nova estratégia

O OmniAuth é flexivel e permite adicionar novos providers que não sejam os suportados por padrão na biblioteca. Com isso, podemos criar um esquema de logins pra qualquer provider ou mesmo criar uma estratégia para utilização off-line do sistema, quando não queremos de fato fazer a conexão em ambientes de testes.

O primeiro passo é indicar nossa nova estratégia e seus parâmetros de acesso, normalmente chaves geradas pelo próprio provider.

Rails.application.config.middleware.use OmniAuth::Builder do
  # Parametros para autenticação e callback
  provider :caelum, "secret", "redirect URL"
end

Até aqui, a biblioteca não conhece o provider oferecido, mas ensinamos ela através do módulo OmniAuth::Strategies, com o código abaixo:

    module OmniAuth
      module Strategies
        class Caelum
          include OmniAuth::Strategy

          def initialize(app, secret, auth_redirect, options = {})
            @secret = secret
            @auth_redirect = auth_redirect
            super(app, :caelum, options)
          end

          def request_phase
            # redirecionamento para o provider
          end

          def callback_phase
            # dados recebidos
          end

        end
      end
    end

Criar uma nova estratégia para seu provider é um processo bem simples utilizando OmniAuth. Existem diversas estratégias criadas e você pode conferir a lista direto no github do projeto.

Conheça também diversos outros tópicos avançados de Ruby na Formação Ruby da Caelum.

Anderson Leite

Tags: , , ,

3 Respostas para “Criando novas estratégias com OmniAuth”

  1. Elizio

    21. jul, 2011

    Muito bom … vai me ajudar bastante vlw

  2. kalilmvp

    02. dez, 2011

    Muito bom..parabéns..

Trackbacks/Pingbacks

  1. Quando redes sociais não são só Facebook e Twitter « Anderson Leite - janeiro 2, 2012

    [...] e permite que você crie sua própria estratégia caso um provider nnao esteja pronto. Fiz isso e criei a estratégia para o Orkut. Um belo passo frente ao problema, agora era capaz de pedir ao orkut a [...]

Deixar uma Resposta