2

connexion Auth0 avec la délégation firebaseAuth0 avec la délégation Firebase

.controller('LoginCtrl', function($scope, auth, $state, store) { 
     auth.signin({ 
     authParams: { 
      // This asks for the refresh token 
      // So that the user never has to log in again 
      scope: 'openid offline_access', 
      // This is the device name 
      device: 'Mobile device' 
     }, 
     // Make the widget non closeable 
     standalone: true 
     }, function(profile, token, accessToken, state, refreshToken) { 
     // Login was successful 
     // We need to save the information from the login 
     store.set('profile', profile); 
     store.set('token', token); 
     store.set('refreshToken', refreshToken); 
     auth.getToken({ 
      api: 'firebase' 
     }).then(function(delegation) { 
      store.set('firebaseToken', delegation.id_token); 
      $state.go('app.categories'); 
     }, function(error) { 
      console.log("There was an error getting the firebase token", error); 
     }) 
     }, function(error) { 
     console.log("There was an error logging in", error); 
     }); 
    }) 

Règle à Auth0 pour attribuer uid propre à la section délégué du jeton:

function (user, context, callback) { 
    var isFirebase = context.request.body.api_type === "firebase"; 
    if (context.isDelegation && isFirebase) { 
    console.log(user.user_id); 
    var uid = user.user_id; 
    var provider = uid.split("|")[0]; 
    var id = uid.substring(uid.indexOf("|") + 1); 
    user.firebase_data = { 
     uid: provider + ":" + id 
    }; 
    } 
    return callback(null, user, context); 
} 

Preuve que le jeton comme uid (comme attendu de firebase dans le jeton décodée)

{ 
    "iss": "https://gitreport.auth0.com/", 
    "sub": "facebook|10153081497714658", 
    "aud": "ZCCZrJ0ggUrk67ePh2UgHSl9FKfpMlcS", 
    "exp": 1438989556, 
    "iat": 1438953556, 
    "v": 0, 
    "d": { 
    "fb_id": "facebook|10153081497714658", 
    "uid": "facebook:10153081497714658" 
    }, 
    "azp": "ZCCZrJ0ggUrk67ePh2UgHSl9FKfpMlcS" 
} 

Tentative d'écrire/utilisateurs/utilisateurs $ à Firebase w ième UID: à savoir/utilisateurs/facebook | 34234234 Règle:

{ 
    "rules": { 
     "users": { 
     "$user_id": { 
      // grants write access to the owner of this user account 
      // whose uid must exactly match the key ($user_id) 
      ".write": "$user_id === auth.uid" 
     } 
     }, 
     "salt" : { 
     ".read" : true, 
     ".write" : false 
     }, 
     "categories" : { 
     ".read" : true, 
     ".write" : false 
     }, 
     ".read": true, 
     ".write": false 
    } 
} 

Malheureusement, je ne peux pas sembler déboguer ce qui se passe sur le côté firebase. J'avais cru comprendre que Firebase attendait l'uid à l'intérieur de l'objet délégué du jeton Firebase mais toute aide serait grandement appréciée. Lorsque j'échange le auth.uid (sur la règle Firebase) avec les informations utilisateur appropriées, l'information est écrite, donc je suis confiant que si je peux en quelque sorte livrer le bon uid à firebase à l'intérieur du jeton, ce sera tout tomber sur place.

Et oui, j'avais l'intention d'utiliser un: au lieu d'un | pour le délimiteur dans uid. Est-ce basé sur ce que Firebase attend?


réponses aux questions de Kato:

@Kato Auth0 utilise le concept de délégation pour générer un jeton Firebase. Ce jeton est stocké sur le navigateur du client. Lorsqu'il est décodé, le jeton ressemble au bloc affiché ci-dessus (preuve que le jeton contient un uid ...) La documentation de firebase indique que l'uid est provider:id, cependant, le dernier article que vous m'avez envoyé indique que l'uid est juste un chaîne générée.

Je suppose que je ne comprends pas où la responsabilité de auth0 commence et la fin de Firebase? Pourquoi ai-je même besoin de déléguer le jeton de auth0? Devrais-je simplement faire un appel complètement séparé à firebase pour générer le jeton? Que dois-je faire avec le jeton Firebase créé par Auth0? Ce qui m'intéresse vraiment, c'est que ni Auth0 ni Firebase ne semblent vraiment comprendre la question que je pose et c'est peut-être parce que je ne la pose pas correctement. Fondamentalement, je veux juste authentifier mes utilisateurs avec Auth0, puis Firebase sécuriser le point de terminaison dans la base de données.

+0

Quand vous mentionnez ceci: « Quand je troque le auth.uid (la règle Firebase) avec les informations d'utilisateur approprié », qui remplacent ID vous ce avec? Êtes-vous en dur "facebook: 10153081497714658"? –

+0

Auth0 ne fournit-il pas déjà un jeton Firebase en tant qu'option? Je suis sûr qu'ils ont une intégration Firebase. En outre, essayer de créer des UID qui ressemblent à la mise en œuvre interne de Firebase [entraînera la casse] (https://groups.google.com/forum/#!topic/firebase-talk/s9mv4S46Qs0). – Kato

+0

Quelle erreur obtenez-vous de Firebase? Où est votre appel authWithOAuthToken() ou authWithCustomToken()? Est-ce que Auth0 fait aussi cette partie pour vous? Je crois que non. – Kato

Répondre