Comprendre les utilisateurs à Kinvey
Ce guide examine les façons courantes de créer l'utilisateur actif dans votre application Kinvey. Nous allons examiner plusieurs exemples clés pour vous aider à démarrer.
Lorsque vous commencez avec Kinvey la première chose que vous voulez faire est de récupérer des données d'une collection. Vous configurez votre collection, la remplissez avec des données et utilisez les autorisations par défaut qui permettent à tous les utilisateurs de lire.
Après avoir inclus le [HTML5] SDK de vous commencez à écrire du code pour récupérer des données. collection:
var
client = Kinvey.init ({
AppTouche:
'kid_rk7NMn57z'
[19659002]
AppSecret:
'3ecc483bd0864882b0c69965030961c6'
});
var
myDatastore = Kinvey.DataStore.collection (
'Ma collection'
);
MonDatastore (). Pull ()
.then (
fonction
(ordinaries) {
// faire quelque chose extraordinaire
}).
capture
(
fonction
(Erreur) {
console.log (erreur);
})
Mais, voilà, plutôt que des données, vous obtenez une erreur NoActiveUserError qui dit:
Il n'y a pas un utilisateur actif. Veuillez vous connecter un utilisateur et réessayer la demande.
La chose clé à retenir est que chaque application Kinvey a un utilisateur actif – si cet utilisateur est explicite (ie connecté avec un nom d'utilisateur / mot de passe ou identité) ou implicite (c.-à-d. qu'ils sont effectivement des utilisateurs «anonymes», comme je l'ai mentionné dans mon article récent ).
Le but de ce guide est de voir comment utilisateur actif dans votre application Kinvey. Nous allons regarder les exemples suivants:
L'application de démonstration
Pour rendre tout cela plus facile à comprendre, j'ai créé un exemple d'application simple. L'application exemple montre tous les sujets dont nous parlerons dans cet article. Il permet à l'utilisateur de continuer sans se connecter (connexion implicite / anonyme), de s'inscrire et de se connecter à l'aide de l'authentification Kinvey, de s'inscrire ou de se connecter à l'aide de l'authentification Google et de s'attribuer un rôle utilisateur. ] En tant que sujet bonus, l'exemple se base même sur quelques simples points de terminaison personnalisés dans Kinvey dont nous parlerons aussi
Vous pouvez voir le code et essayer l'application via le JSFiddle ci-dessous. [19659044] Vous pouvez soit obtenir directement le code du JSFiddle soit le le rendre disponible sur GitHub .
Notez que si vous voulez recréer le projet pour votre propre Kinvey par exemple, remplacez les valeurs appKey et appSecret dans le fichier scripts.js du projet GitHub .
Alors que l'exemple d'application est Construit avec HTML et JavaScript, les exemples Kinvey SDK devraient traduire à travers les différentes langues et fr ameworks. Le Kinvey DevCenter facilite l'échange de documentation entre toutes les plateformes supportées sans perdre le contexte
The Kinvey Setup
Dans Kinvey, l'application de démonstration a trois collections.
des gens ordinaires des héros peuvent accéder aux héros et des méchants peuvent accéder aux méchants ), dont nous discuterons plus détail dans la section rôles ci-dessous
Dans ce tutoriel, nous allons discuter de trois types d'utilisateurs:
- Utilisateurs implicites (ie utilisateurs anonymes) qui ne nécessitent pas de connexion.
- Utilisateurs authentifiés à l'aide de l'authentification Kinvey.
- Utilisateurs authentifiés à l'aide d'un compte social (dans notre exemple, ce sera Google) via Mobile Identity Connect de Kinvey avec OAuth
Il est important de noter qu'il existe d'autres types d'authentification disponibles dans Kinvey tels que LDAP ou Active Directory que je ne serai pas
Tous les utilisateurs (implicitement, Kinvey, Google) sont stockés dans notre collection d'utilisateurs dans Kinvey, comme vous pouvez le voir ci-dessous.
_socialidentity et l'utilisateur implicite n'a aucune de ces choses.
Création d'un utilisateur actif implicite (anonyme)
Revenons à cette collection que j'ai montrée plus tôt – l'une avec les autorisations par défaut qui donnent à tous les utilisateurs la capacité de lecture ité. Je ne veux pas que quelqu'un doive se connecter pour voir ces données. Comment pourrions-nous créer un utilisateur qui a accès à ces données sans nécessiter d'authentification?
Dans notre application exemple, il y a l'option "Continuer sans connexion" qui implémente ceci. Gardez à l'esprit que même si cela est déclenché par l'interaction de l'utilisateur dans l'exemple, cela peut également se produire de manière transparente (sans intervention de l'utilisateur) -voir mon post précédent pour un exemple de cela. faire, comme toujours, est d'initialiser la bibliothèque Kinvey
var
client = Kinvey.init ({
AppKey:
'kid_rk7NMn57z'
appSecret:
'3ecc483bd0864882b0c69965030961c6'
));
]
Voyons maintenant ce qui se passe lorsque vous cliquez sur le lien "Continuer sans vous connecter"
// Connectez-vous à un utilisateur implicite (anonyme) par défaut au rôle de tous les utilisateurs
[19659002] document.getElementById (
'nosignin'
). AddEventListener (
'clic'
fonction [19659005] () {
connexionSuccess ();
document.getElementById (
' rolechooser '
). classList.add (
' fadeout '
);
var
promesse = Kinvey.User. inscription ()
.then (
fonction
(utilisateur) {
loadData ()
}).
capturer
(
fonction
(Erreur) {
console.log (erreur);
});
[19659002] });
Les deux premières lignes de code ici essentiellement à la main les transitions et les styles. La partie clé est la suivante:
var
promesse = Kinvey.User.signup ()
.then (
fonction
(utilisateur) {
loadData ();
}).
capture
(
fonction
(erreur) {
console.log (erreur);
});
L'appel de la méthode inscrivez-vous () créera un utilisateur implicite et, en supposant qu'il réussisse, chargera les données. Dans ce cas, nous chargerons des données à partir de la collection ordinary-people car notre utilisateur implicite dispose uniquement des autorisations par défaut "All Users"
var
ordinary_ds = Kinvey.DataStore.collection (
'peuple ordinaire'
);
ordinary_ds.pull ()
.then (
fonction [19659009] (ordinaires) {
var
el = document.getElementById (
'ordinaires-list'
),
chrList =
''
;
ordinaries.forEach (
fonction [19659009] (ordinaire) {
chrList + =
'
+ ordinaire.nom +
'
;
});
el.innerHTML = christe
Afficher les caractères ( ]
})
.
capture
(
fonction
(Erreur) {
console.log (erreur);
});
Tenter d'accéder aux données des collections de héros ou de familles de entraînera une InsufficientCredentialsError en raison de l'absence du rôle approprié.
aurai des tonnes d'utilisateurs implicites / anonymes dans ma collection d'utilisateurs de Kinvey?
Oui. La stratégie que nous utilisons ci-dessus créerait un nouvel utilisateur implicite pour chaque appareil ou navigateur. L'ID utilisateur sera mis en cache dans le stockage local mais sera supprimé chaque fois que nous appellerons la méthode Kinvey.User.logout () (notez que cela est appelé à chaque rechargement de notre exemple d'application , quelque chose n'est pas recommandé pour une application de production typique). Il n'y a pas de restriction sur le nombre d'utilisateurs que vous pouvez créer, mais c'est quelque chose à garder à l'esprit, surtout si vous envisagez de gérer manuellement les autorisations des utilisateurs via la console Kinvey. Une autre stratégie consisterait à créer un compte de service pour votre application Web et à exécuter tous les appels anonymes via ce compte
Utilisation de l'authentification Kinvey
La plupart des applications nécessitent une forme d'authentification de l'utilisateur. Bien sûr, vous pouvez rouler les vôtres, mais l'utilisation de l'authentification Kinvey peut vous aider à accélérer votre développement. Regardons comment.
S'inscrire
Notre exemple d'application a des exigences d'inscription très simples, ne nécessitant qu'un nom d'utilisateur et un mot de passe. Dans la plupart des cas, vous aurez besoin de plus d'informations, mais le système prend en charge l'ajout de attributs utilisateur supplémentaires lors de l'inscription.
Voici le code d'inscription de base de notre exemple d'application.
/ / inscrivez un nouvel utilisateur avec l'authentification Kinvey
document.getElementById (
'signup-button'
). addEventListener (
'cliquez'
function
(événement) {
// TODO: effectue la validation de forme
[19659094] var
utilisateur =
nouveau
Kinvey.User ();
var
promesse = user.signup ({
nom d'utilisateur: document.getElementById (
'email'
). Valeur,
[19659033] mot de passe: document.getElementById (
'mot de passe'
) .valeur
})
.then (
fonction
(utilisateur) {
connexionSuccess ();
console.log (utilisateur);
})
.
capture
(
fonction
(erreur) {
// pour l'amour de simplicité, je montre juste les erreurs que l'API me renvoie
document.getElementById (
'erreur'
). innerHTML = erreur.message;
});
})
Pour enregistrer un nouvel utilisateur, nous appelons simplement la même méthode d'inscription () nous avons utilisé pour l'utilisateur implicite, mais cette fois nous passons une combinaison de nom d'utilisateur et mot de passe. Il est important de noter que, par souci de simplicité, puisqu'il s'agit d'un exemple d'application et non d'une application réelle, nous n'effectuons aucune validation côté client sur le nom d'utilisateur et le mot de passe.
sauvegarder toutes les erreurs que nous pouvons recevoir dans le processus d'inscription. Bien que cela ne soit pas nécessairement recommandé pour une application réelle, heureusement, les messages sont assez clairs. Par exemple, voici ce qui se passe si j'essaie de m'enregistrer en utilisant un courriel qui existe déjà dans le système:
intégré avant d'appeler la méthode d'inscription ()
Connexion
Se connecter l'utilisateur enregistré est aussi simple que de passer le nom d'utilisateur et le mot de passe à la méthode login ()
// se connecter en utilisant l'authentification Kinvey
document.getElementById (
'bouton de connexion'
). AddEventListener (
'click'
fonction
(événement) {
[19659094]
utilisateur =
nouveau
Kinvey.User ();
var
promesse = user.login ({
[1945900?4]
nom d'utilisateur: document.getElementById (
'email'
). Valeur,
[19659033] mot de passe: document.getElementById (
'mot de passe'
) .valeur
})
.then (
fonction
(utilisateur) {
connexionSuccess ();
[19659002]
console.log (utilisateur);
})
.
capture
(
fonction
(erreur) {
document.getElementById (
] 'erreur'
). innerHTML = erreur.message;
})
})
Encore une fois, par souci de simplicité, nous ne font que renvoyer toutes les erreurs de connexion que nous pouvons recevoir
Pourquoi utiliser l'authentification Kinvey?
Vous vous demandez peut-être quel est le problème? ? Ce n'est pas difficile à mettre en œuvre par vous-même. Cependant, maintenant que nous avons construit l'inscription et la connexion, la plupart des applications nécessiteraient les fonctionnalités supplémentaires suivantes:
La bonne nouvelle – comme vous pouvez le voir dans les liens ci-dessus – est que toutes ces fonctionnalités sont déjà cuites pour vous. Authentification Kinvey
Utilisation de l'authentification d'identité sociale L'authentification d'identité sociale comme celles offertes par Google, Facebook, Twitter et LinkedIn peut être un outil utile pour faciliter l'inscription des utilisateurs. pour votre application en utilisant un compte qu'ils possèdent déjà. Il peut transformer le processus d'inscription et de connexion en un seul clic, et plus il est facile de s'inscrire, moins les utilisateurs abandonneront le processus. Chaque fournisseur d'authentification (Google, Facebook, etc.) a ses propres exigences et Documentation. Du côté de Kinvey, ceux-ci sont tous gérés via le service Mobile Identity Connect (MIC) . Regardons un exemple de configuration de MIC pour permettre aux utilisateurs de s'inscrire et de se connecter avec leur compte Google.
Configurer Google Sign-In
Le plus difficile dans la configuration des informations d'identification dans Google Les APIs savent où chercher - le reste est facile.
Accédez à la [API de Google API] . Le lien que vous voulez est l'option "Credentials" sous "API & Services" dans le menu de gauche. Lors de votre première visite, cela peut vous amener à une liste API Library (ne me demandez pas pourquoi). Si oui, cliquez simplement sur le lien Credentials et cliquez de nouveau dessus.
Cliquez ensuite sur le bouton "Create credentials". une liste déroulante où vous pouvez choisir "ID client OAuth". Cela vous amènera à une page où vous pouvez choisir le type d'application. Puisque notre application de démonstration est une application Web, choisissez cette option.
Remplissez le formulaire. Le nom peut être quelque chose que vous aimez. Les "origines JavaScript autorisées" peuvent être vides. Sous "URI de redirection autorisée", nous devons ajouter. Pourquoi n'avons-nous pas besoin de l'URI de notre application web? C'est parce que Kinvey va gérer tout pour nous.
Vous pouvez voir un exemple de mes paramètres d'informations d'identification Google remplis ci-dessous.
Configuration de MIC
Maintenant que nos identifiants Google sont tous configurez, configurons Mobile Identity Connect à l'intérieur de la console Kinvey.
Commencez par cliquer sur l'option "Mobile Identity Connect" sous le sous-menu "Identity" dans la navigation de gauche, puis cliquez sur le bouton "Add Auth Service". "Et choisissez" OAuth2 ".
Il y a beaucoup de paramètres sur ce formulaire, mais regardons ce qui nous concerne.
- Le nom peut être quelque chose que vous aimez.
- L'URI de fournisseur devrait être https : //www.googleapis.com/oauth2/v4/token (via la documentation Google ).
- Les URI de redirection doivent inclure l'URL où la démo est en cours d'exécution (ainsi, comme vous pouvez le voir ci-dessous, j'ai ajouté mes URL localhost et JSFiddle dans lesquelles je lance la démo). Notez que les barres obliques, les hachages et les autres caractères sont importants ici.
- Le "type de subvention" doit être "code d'autorisation".
- Le "point final d'attribution" doit être https://accounts.google.com/o/oauth2/ v2 / auth (toujours via la documentation de Google )
- Les "ID Client" et "Client Secret" devraient être ceux fournis par Google ci-dessus.
- La valeur de "Scope" devrait être "Email".
Vous pouvez voir mes paramètres complets ci-dessous:
Ecrire le code
Maintenant que nous Vous êtes sur Google et Kinvey, regardons le code qui s'affiche quand vous cliquez sur le bouton de connexion avec Google sur la démo.
// inscrivez-vous ou connectez-vous avec l'authentification Google
document.getElementById (
'google-login'
). AddEventListener (
'cliquez sur
function
(événement) {
var
promesse = Kinvey.User.loginWithMIC (window.location.href)
promise.then (
fonction
onSuccess (utilisateur) {
connexionSuccess ();
console. log (utilisateur);
}).
catch
(
fonction
onErreur (erreur) {
document.getElementById (
'erreur'
). InnerHTML = erreur.message;
});
})
Yup, il n'y a pas beaucoup de code impliqué. Appelez simplement la méthode Kinvey.User.loginWithMIC () et transmettez l'URL de rappel. Dans le code de démonstration, nous ne faisons que passer l'URL actuelle, ce qui signifie simplement que nous n'avons pas besoin de changer le code de localhost en JSFiddle. Encore une fois, ce code publie le texte de l'erreur dans le formulaire, mais une application réelle aurait besoin d'une meilleure gestion des erreurs en cas d'échec de la connexion.
Restreindre l'accès avec des rôles
À ce stade, toutes nos démonstrations Les utilisateurs de l'application peuvent se connecter avec l'authentification Kinvey ou Google Sign-In ou ignorer la connexion en tant qu'utilisateur anonyme. Évidemment, tous nos utilisateurs ont les autorisations par défaut "Tous les utilisateurs" et, par défaut, les collections donnent à "Tous les utilisateurs" des droits de lecture et d'écriture. Voici les autorisations de collection par défaut:
types d'accès Par défaut, tous les utilisateurs ont des capacités de création et de lecture, mais celles-ci peuvent être restreintes par des rôles et, évidemment, par défaut, toutes les autorisations d'utilisateurs peuvent être modifiées ou supprimées.
Console
Les rôles sont faciles à créer à partir de la console Kinvey.Cliquez simplement sur l'option "Rôles" sous la sous-navigation "Identité", créez un nouveau rôle et donnez-lui un nom.Par exemple, dans notre exemple d'application, nous avoir trois rôles:
Octroi d'autorisations de collection à des rôles spécifiques
Définissez les permissions pour une collection, ouvrez les paramètres de la collection et choisissez "Autorisations" .De là, nous pouvons supprimer ou modifier les permissions existantes ou ajouter des permissions pour tous les rôles que nous avons créés.Par exemple, la collection Heroes dans notre exemple d'application ne devrait donner accès qu'à d'autres personnes auxquelles on attribue le rôle de "Héros" Un "méchant" devrait évidemment se voir refuser l'accès (nous ne voudrions pas que l'on découvre les identités secrètes de nos héros?) [19659003] Affectation de rôles par code
L'étape suivante consiste à permettre à nos utilisateurs d'être assignés à un rôle de héros ou de méchant (ou aucun de ceux-ci s'ils choisissent de contourner la connexion). Passons au codage ...
Mais d'abord, il y a quelques bonnes nouvelles / mauvaises nouvelles ici.
- ? L'attribution de rôles n'est pas encore supportée dans les SDK de Kinvey.
- ? Nous pouvons toujours attribuer des rôles en utilisant le code L'API REST de Kinvey .
- ? L'attribution de rôles via l'API REST nécessite l'utilisation des identifiants principaux que nous ne souhaitons pas exposer dans le code JavaScript côté client.
- ? Kinvey offre l'option de logique métier dans les points de terminaison personnalisés qui annulerait le besoin d'exposer les informations d'identification du maître.
Le résultat final est que nous pouvons définitivement faire ce que nous voulons. vouloir faire ici-et ce n'est même pas si difficile. Création des points de terminaison personnalisés
Kinvey propose plusieurs options qui nous permettent de personnaliser les requêtes à notre backend, depuis des hooks de collection jusqu'à Services Flex . Chacune de ces solutions offre la possibilité d'exécuter une logique métier côté serveur, mais dans ce cas, nous utiliserons des points de terminaison personnalisés que nous pouvons appeler via des requêtes REST.
Pour ce faire, cliquez sur "Personnaliser". Endpoints "sous l'option" Business Logic "dans le menu de gauche de la console Kinvey. Cliquez sur le bouton "Ajouter un point de terminaison", donnez-lui un nom (le premier que nous allons créer s'appelle "addRole") et, enfin, choisissez l'option "Code Editor" avant de continuer.
function
] onRequest (requête, réponse, modules) {
var
contexte = modules.backendContext,
utils = modules.utils,
appKey = contexte.getAppKey (),
masterSecret = context.getMasterSecret (),
identifiant userid = request.body.userid,
roleid = request.body.roleid,
authString =
"De base"
+ utils .base64.encode (appKey +
":"
+ maîtreSecret),
requestOptions = {
uri: uri,
annotations: [
[19659409] "Autorisation"
: authString
}
},
auteur
[19659007] auth = module s.request.put (requestOptions,
fonction
(erreur, res, corps) {
si
(erreur) {
réponse.erreur (erreur);
}
autre
{
réponse.body = JSON.parse (corps);
réponse. complet (res.status);
}
});
}
Chaque fournisseur d'authentification (Google, Facebook, etc.) a ses propres exigences et Documentation. Du côté de Kinvey, ceux-ci sont tous gérés via le service Mobile Identity Connect (MIC) . Regardons un exemple de configuration de MIC pour permettre aux utilisateurs de s'inscrire et de se connecter avec leur compte Google.
Configurer Google Sign-In
Le plus difficile dans la configuration des informations d'identification dans Google Les APIs savent où chercher - le reste est facile.
Accédez à la [API de Google API] . Le lien que vous voulez est l'option "Credentials" sous "API & Services" dans le menu de gauche. Lors de votre première visite, cela peut vous amener à une liste API Library (ne me demandez pas pourquoi). Si oui, cliquez simplement sur le lien Credentials et cliquez de nouveau dessus.
Cliquez ensuite sur le bouton "Create credentials". une liste déroulante où vous pouvez choisir "ID client OAuth". Cela vous amènera à une page où vous pouvez choisir le type d'application. Puisque notre application de démonstration est une application Web, choisissez cette option.
Remplissez le formulaire. Le nom peut être quelque chose que vous aimez. Les "origines JavaScript autorisées" peuvent être vides. Sous "URI de redirection autorisée", nous devons ajouter. Pourquoi n'avons-nous pas besoin de l'URI de notre application web? C'est parce que Kinvey va gérer tout pour nous.
Vous pouvez voir un exemple de mes paramètres d'informations d'identification Google remplis ci-dessous.
Configuration de MIC
Maintenant que nos identifiants Google sont tous configurez, configurons Mobile Identity Connect à l'intérieur de la console Kinvey.
Commencez par cliquer sur l'option "Mobile Identity Connect" sous le sous-menu "Identity" dans la navigation de gauche, puis cliquez sur le bouton "Add Auth Service". "Et choisissez" OAuth2 ".
Il y a beaucoup de paramètres sur ce formulaire, mais regardons ce qui nous concerne.
- Le nom peut être quelque chose que vous aimez.
- L'URI de fournisseur devrait être https : //www.googleapis.com/oauth2/v4/token (via la documentation Google ).
- Les URI de redirection doivent inclure l'URL où la démo est en cours d'exécution (ainsi, comme vous pouvez le voir ci-dessous, j'ai ajouté mes URL localhost et JSFiddle dans lesquelles je lance la démo). Notez que les barres obliques, les hachages et les autres caractères sont importants ici.
- Le "type de subvention" doit être "code d'autorisation".
- Le "point final d'attribution" doit être https://accounts.google.com/o/oauth2/ v2 / auth (toujours via la documentation de Google )
- Les "ID Client" et "Client Secret" devraient être ceux fournis par Google ci-dessus.
- La valeur de "Scope" devrait être "Email".
Vous pouvez voir mes paramètres complets ci-dessous:
Ecrire le code
Maintenant que nous Vous êtes sur Google et Kinvey, regardons le code qui s'affiche quand vous cliquez sur le bouton de connexion avec Google sur la démo.
// inscrivez-vous ou connectez-vous avec l'authentification Google
document.getElementById (
'google-login'
). AddEventListener (
'cliquez sur
function
(événement) {
var
promesse = Kinvey.User.loginWithMIC (window.location.href)
promise.then (
fonction
onSuccess (utilisateur) {
connexionSuccess ();
console. log (utilisateur);
}).
catch
(
fonction
onErreur (erreur) {
document.getElementById (
'erreur'
). InnerHTML = erreur.message;
});
})
Yup, il n'y a pas beaucoup de code impliqué. Appelez simplement la méthode Kinvey.User.loginWithMIC () et transmettez l'URL de rappel. Dans le code de démonstration, nous ne faisons que passer l'URL actuelle, ce qui signifie simplement que nous n'avons pas besoin de changer le code de localhost en JSFiddle. Encore une fois, ce code publie le texte de l'erreur dans le formulaire, mais une application réelle aurait besoin d'une meilleure gestion des erreurs en cas d'échec de la connexion.
Restreindre l'accès avec des rôles
À ce stade, toutes nos démonstrations Les utilisateurs de l'application peuvent se connecter avec l'authentification Kinvey ou Google Sign-In ou ignorer la connexion en tant qu'utilisateur anonyme. Évidemment, tous nos utilisateurs ont les autorisations par défaut "Tous les utilisateurs" et, par défaut, les collections donnent à "Tous les utilisateurs" des droits de lecture et d'écriture. Voici les autorisations de collection par défaut:
types d'accès Par défaut, tous les utilisateurs ont des capacités de création et de lecture, mais celles-ci peuvent être restreintes par des rôles et, évidemment, par défaut, toutes les autorisations d'utilisateurs peuvent être modifiées ou supprimées.
Console
Les rôles sont faciles à créer à partir de la console Kinvey.Cliquez simplement sur l'option "Rôles" sous la sous-navigation "Identité", créez un nouveau rôle et donnez-lui un nom.Par exemple, dans notre exemple d'application, nous avoir trois rôles:
Octroi d'autorisations de collection à des rôles spécifiques
Définissez les permissions pour une collection, ouvrez les paramètres de la collection et choisissez "Autorisations" .De là, nous pouvons supprimer ou modifier les permissions existantes ou ajouter des permissions pour tous les rôles que nous avons créés.Par exemple, la collection Heroes dans notre exemple d'application ne devrait donner accès qu'à d'autres personnes auxquelles on attribue le rôle de "Héros" Un "méchant" devrait évidemment se voir refuser l'accès (nous ne voudrions pas que l'on découvre les identités secrètes de nos héros?) [19659003] Affectation de rôles par code
L'étape suivante consiste à permettre à nos utilisateurs d'être assignés à un rôle de héros ou de méchant (ou aucun de ceux-ci s'ils choisissent de contourner la connexion). Passons au codage ...
Mais d'abord, il y a quelques bonnes nouvelles / mauvaises nouvelles ici.
- ? L'attribution de rôles n'est pas encore supportée dans les SDK de Kinvey.
- ? Nous pouvons toujours attribuer des rôles en utilisant le code L'API REST de Kinvey .
- ? L'attribution de rôles via l'API REST nécessite l'utilisation des identifiants principaux que nous ne souhaitons pas exposer dans le code JavaScript côté client.
- ? Kinvey offre l'option de logique métier dans les points de terminaison personnalisés qui annulerait le besoin d'exposer les informations d'identification du maître.
Le résultat final est que nous pouvons définitivement faire ce que nous voulons. vouloir faire ici-et ce n'est même pas si difficile. Création des points de terminaison personnalisés
Kinvey propose plusieurs options qui nous permettent de personnaliser les requêtes à notre backend, depuis des hooks de collection jusqu'à Services Flex . Chacune de ces solutions offre la possibilité d'exécuter une logique métier côté serveur, mais dans ce cas, nous utiliserons des points de terminaison personnalisés que nous pouvons appeler via des requêtes REST.
Pour ce faire, cliquez sur "Personnaliser". Endpoints "sous l'option" Business Logic "dans le menu de gauche de la console Kinvey. Cliquez sur le bouton "Ajouter un point de terminaison", donnez-lui un nom (le premier que nous allons créer s'appelle "addRole") et, enfin, choisissez l'option "Code Editor" avant de continuer.
function
] onRequest (requête, réponse, modules) {
var
contexte = modules.backendContext,
utils = modules.utils,
appKey = contexte.getAppKey (),
masterSecret = context.getMasterSecret (),
identifiant userid = request.body.userid,
roleid = request.body.roleid,
authString =
"De base"
+ utils .base64.encode (appKey +
":"
+ maîtreSecret),
requestOptions = {
uri: uri,
annotations: [
[19659409] "Autorisation"
: authString
}
},
auteur
[19659007] auth = module s.request.put (requestOptions,
fonction
(erreur, res, corps) {
si
(erreur) {
réponse.erreur (erreur);
}
autre
{
réponse.body = JSON.parse (corps);
réponse. complet (res.status);
}
});
}
La première partie définit une tonne de variables, alors regardons les plus importantes à comprendre:
- La appKey et masterSecret Les variables utilisent des méthodes pour obtenir les informations d'identification principales que nous ne voulions pas exposer dans notre code côté client. Comme le point de terminaison personnalisé s'exécute dans le contexte des informations d'identification principales, nous n'avons pas besoin de le coder en dur ici.
- userid et roleid extraire les données que nous enverrons la demande. Nous verrons comment envoyer ces données lorsque nous écrirons le code côté client.
- Les uri authstring et requestOptions assemblent les informations nécessaires pour faites la demande pour ajouter un rôle - nous utilisons toujours l'API REST ici.
Enfin, nous utilisons le module request pour faire une requête PUT à l'API REST pour ajouter un rôle. [19659003Lecodedenotreprochainpointdeterminaisonpersonnalisé( deleteRole ) pour supprimer un rôle d'un utilisateur est presque identique au code précédent. Pouvez-vous repérer la différence?
function
onRequest (requête, réponse, modules) {
var
context = modules.backendContext,
utils = modules.utils,
appKey = contexte.getAppKey (),
MaîtreSecret = context.getMasterSecret (),
Fichier userid = request.body.userid,
roleid = demande.body.roleid,
authString = [19659008] "Basique"
+ utils.base64.encode (appKey +
":"
+ masterSecret),
requestOptions = {
[1 9459004]
uri: uri,
en-têtes: {
"Autorisation"
: authString
}
[19659387]},
auth;
auth = modules.request.del(requestOptions,
function
(error, res, body){
if
(error){
response.error(error);
[19659033]} [19659022]else
{
response.body =
"{}"
;
response.complete(res.status);
}
});
}
The only real difference is that the request is a DELETE request to the REST API so it uses the modules.request.del() method. You may have noticed that the response body of the DELETE request is empty, so we’ve modified that as well.
Calling Our Custom Endpoints
Let’s look at how we call these custom endpoints in code.
// just in case, remove the other role first then pass the hero role id to assign the role
document.getElementById(
'hero-button'
).addEventListener(
'click'
function
() {
var
userid = Kinvey.User.getActiveUser(client)._id,
promise = Kinvey.CustomEndpoint.execute(
'deleteRole'
{
userid: userid,
roleid: villainRoleId
})
.then(
function
(response) {
setRole(heroRoleId);
})
.
catch
(
function
(error) {
console.log(error);
});
});
When we click the “I’m a hero” button, we’ll first call the deleteRole endpoint to remove the villain role from the user, if it exists. We invoke the custom endpoint with Kinvey.CustomEndpoint.execute(). We specify the name of the endpoint that we are calling (i.e. deleteRole) and then specify the body (this is where the request.body variables we populate within the custom endpoint code come from). The code for the “I’m a villain” button is basically the same, simply passing different values to add and remove.
Note that instead of hardcoding the role IDs, in a real-world app we might get a list of roles to populate the options. This would also require the help of a custom endpoint as it requires the master credentials as well.
The setRole() method that we call in the above code calls our other custom endpoint (i.e. addRole).
// set the user role via the REST API (not available in SDK at the moment)
function
setRole(roleid) {
var
userid = Kinvey.User.getActiveUser(client)._id,
promise = Kinvey.CustomEndpoint.execute(
'addRole'
{
userid: userid,
roleid: roleid
})
.then(
function
(response) {
console.log(response);
document.getElementById(
'rolechooser'
).classList.add(
'fadeout'
);
loadData();
})
.
catch
(
function
(error) {
console.log(error);
});
}
Now that our users can choose a hero or villain role (or choose to remain in th e all users role by bypassing the login), we’ll see that when trying to access a collection that they do not have rights to (ex. a villain accessing the heroes collection) causes the request to return an InsufficientCredentialsError denying them access.
Next Steps
Obviously our demo app is intentionally contrived, but hopefully it illustrated some of the core concepts around users within Kinvey. If we wanted to expand upon the authentication, we could add support for logging in via Facebook, LinkedIn or Twitter using Mobile Identity Connect and following a very similar course as we did for Google Log-In. We could also enable people to connect the login to our enterprise authentication using LDAP or Active Directory. The tools are all available to you within Kinvey.
To access the full code for this sample visit the project on GitHub or on JSFiddle.
Source link