2016-10-25 2 views
0

Je veux obtenir le flux de travail de connexion suivant:Construire une stratégie OmniAuth avec un workflow personnalisé

  1. utilisateur clique sur le bouton de connexion
  2. utilisateur est redirigé vers notre plate-forme d'authentification
  3. utilisateur soumet les informations de connexion et puis redirigé vers notre site Web via un URL de rappel prédéfini
  4. la stratégie OmniAuth doit décoder la réponse (en utilisant notre SDK) et enregistrer le résultat dans le omniauth.auth hachage

Ce processus est-il facilement réalisable à l'aide d'une stratégie OmniAuth? La documentation ne me semble pas très claire, et la majorité des stratégies déjà construites semblent utiliser le flux de travail OAuth.

Répondre

1

Apparemment, c'est assez facile à faire.

La stratégie OmniAuth

module OmniAuth 
    module Strategies 
    class Service 
     include OmniAuth::Strategy 

     def request_phase 
     redirect AUTHENTICATION_URL 
     end 

     uid { @user_details.user_id } 

     def extra 
     @user_details # Return a hash with user data 
     end 

     def callback_phase 
     # Configure Service SDK 
     @user_details = Service.user_data # Make SDK call to get user details 
     super 
     end 
    end 
    end 
end 

L'App

1) Ajouter un bouton de connexion avec l'URL d'authentification:

<%= link_to 'Login', 'auth/service' %> 

2) Ajouter un itinéraire de rappel

get '/auth/service/callback', to: 'sessions#create' 

3) traiter la réponse de rappel dans le dispositif de commande

class SessionsController < ApplicationController 
    def create 
    @user = User.find_or_create_by(service_id: auth_hash.uid) 
    # Handle @user 
    end 
end