Je me demandais si quelqu'un serait assez gentil de fournir un exemple de météorpad ou de code d'utilisation de l'une des méthodes énumérées correctement dans Meteor (avec le routeur de fer). J'ai du mal à comprendre comment ces méthodes interagissent exactement avec mon application, et il semble que ces méthodes sont suffisamment nouvelles qu'il n'y a pas beaucoup de bonne documentation sur la manière de les utiliser correctement. Merci! P>
http://docs.meteor.com/#/full/Accounts-OronresetPasswordLink < / a> p>
4 Réponses :
par la documentation: p>
Vous pouvez construire votre propre interface utilisateur à l'aide des fonctions ci-dessous ou utilisez le package Comptes-UI pour inclure une interface utilisateur clé-clé pour une connexion basée sur le mot de passe. P> blockQuote>
Par conséquent, ces rappels sont pour rouler votre propre solution personnalisée. Cependant, je vous recommanderais d'utiliser l'un des packages suivants ci-dessous, avec Saisie de comptes forte> Être ma solution préférée: P>
Utilisez une combinaison de
mot de passe comptes strong> et comptes-ui strong> p> li>
Merci puce. J'essaie en fait de rouler ma propre solution personnalisée dans notre application. Tout fonctionne à l'exception de ces rappels. J'aimerais comprendre comment ces travaux parce que la façon dont je le fais, semble maintenant un peu "pirate". Je suis sous l'impression que ces rappels aideront à nettoyer ce code. Si je le découvre, je vais essayer de poster ici pour tout le monde.
@BGMASTER - OK, ça sonne bien. Les emails sont-ils envoyés? Sinon, je serais sûr de l'obtenir d'abord. Après cela, j'ajouterais les rappels à l'intérieur d'un fichier B> Client-côté B> selon les documents, puis ajoutez console.log b> déclarations pour voir lorsqu'ils tirent lorsqu'ils tirent. Les documents de rappel sont définitivement légers sur des exemples IMHO, mais les descriptions de base ont un sens, je pense donc que la clé consiste à obtenir les courriels envoyés à de nouvelles dépannements.
Alors oui, les courriels étaient envoyés. J'ai cliqué sur les liens et tout semblait fonctionner, mais j'ai été confondu sur le rappel "fait" et comment il fonctionnait. En regardant à travers le code @stubailo fourni ci-dessus a beaucoup aidé beaucoup. D'après ce que je comprends, "Terminé" permet simplement à l'application d'aller de l'avant avec la journalisation. J'espérais pouvoir exécuter une redirection par «fait» ou faire une autre action.
J'ai écrit cette méthode, j'espère que je peux donner un bon exemple de la façon de l'utiliser. P>
Il est censé être conjointement avec Fondamentalement, disons que vous souhaitez implémenter votre propre système d'interface utilisateur de comptes au lieu d'utiliser le package code> ui code> ou similaire. Si vous souhaitez avoir un système de réinitialisation du mot de passe, vous avez besoin de trois choses: P>
Voici comment le débit devrait fonctionner: p>
Ceci est un peu compliqué car c'est le flux le plus avancé et le plus personnalisé possible. Si vous ne voulez pas gâcher avec tous ces rappels et méthodes, je vous recommanderais d'utiliser l'un des packages UI de comptes existants, par exemple Pour un exemple de code, jetez un coup d'œil au code de l'emballage code> comptes-ui code>: Httptps://github.com/meteor/meteor/blob/devel/packages/accounts-u-unstyled/login_buttons_dialogs.js P> comptes.SendResetPasswordSemail code> et
comptes.ResetPassword code> (Http://docs.meteor.com/#/full/accounts_sendressetPasswordPasswordSemail et http: // docs.meteor.com/#/full/accounts_resetpassword ). P>
comptes.sendResetPasswordSemail code> li>
comptes.EnresetpasswordLink code> li>
comptes.ResetPassword code> avec le jeton et le nouveau mot de passe li>
comptes-ui code> ou Https://atmosphèrejs.com/ian/accounts-u-bootstrap-3 p>
J'ai donc parcouru le code des comptes-UI et cela a contribué. Je vous suis apprécié de vous lier à cela. Je me luttais avec la fonction "fait" étant transmis au rappel. On dirait que cela ne fait que réacmer l'autologin? Je ne sais pas exactement ce que cela fait, mais cela doit-il être appelé à partir de votre flux d'interface utilisateur (après avoir soumis votre formulaire de changement de mot de passe et exécutant des comptes .ResetPassword)? Je veux rediriger mon application à un nouvel itinéraire, mais si je le fais, appelez "fait" plus tard semble être de plus en plus difficile.
"Autologin" est un processus qui arrive chaque fois que vous ouvrez une application météore dans un nouvel onglet - il ressemble au stockage local pour une connexion existante. Pour le flux de mot de passe de réinitialisation, nous ne voulons pas utiliser la connexion existante car vous pourriez vous retrouver dans une situation dans laquelle vous réinitialisez le mot de passe pour le compte A est connecté au compte B, ce qui pourrait être déroutant. Le rappel terminé est important au cas où l'utilisateur souhaite annuler le flux de réinitialisation du mot de passe et vous souhaitez continuer avec le processus d'autologin normal.
OK, alors je vais publier ce que j'ai fini par apprendre et que je fais ici afin que d'autres puissent l'utiliser comme référence. Je ferai de mon mieux pour expliquer ce qui se passe aussi.
Comme on peut le voir dans les autres commentaires, la fonction "Terminée" transmise à la page Comptes.In **** Link Callback était la partie principale qui m'a trébuché. Cette fonction ne fait qu'une chose - réactive l'autologin. Il convient de noter que la fonction «fait» / autologin est une partie de l'un des packages «comptes» principaux et ne peut pas être modifié. "Autologin" est utilisé dans une situation particulière: l'utilisateur a essentiel de réinitialiser son PW sur un ordinateur sur un ordinateur où l'utilisateur B est actuellement connecté. Si l'utilisateur A quitte le flux de mot de passe de réinitialisation avant de soumettre un nouveau mot de passe, l'utilisateur B restera connecté IN. Si l'utilisateur a complète le flux de mot de passe de réinitialisation, l'utilisateur B est déconnecté et l'utilisateur A est connecté. p>
Le motif utilisé pour gérer "Terminé" dans le paquet Comptes-UI et ce que j'ai terminé En faisant, attribue «Terminé» à une variable qui peut ensuite être transmise à la fonction de votre gestionnaire d'événements de votre modèle et exécuté une fois que votre logique de mot de passe de réinitialisation est terminée. Cette affectation de variable doit être effectuée dans les comptes.on **** Link Rappel, mais le rappel peut être placé dans n'importe quel code côté client de niveau supérieur (assurez-vous simplement d'affecter correctement la portée des variables). Je viens de le mettre au début de mon fichier de réinitialisation_password_template.js (je n'ai fait que cela pour réinitialiser les mots de passe jusqu'à présent, mais le motif doit être similaire): p>
Client / réinitialiser_password_template.js: p >
// if you have links in your template that navigate to other parts of your app, you need to reset your session variable before navigating away, you also need to call the doneCallback to re-enable autoLogin Template.reset_password_template.rendered = function() { var sessionReset = function() { Session.set('resetPasswordToken', ''); if (doneCallback) { doneCallback(); } } $("#link-1").click(function() { sessionReset(); }); $('#link2').click(function() { sessionReset(); }); } Template.reset_password_template.events({ 'submit #reset-password-form': function(e) { e.preventDefault(); var new_password = $(e.target).find('#new-password').val(), confirm_password = $(e.target).find('#confirm-password').val(); // Validate passwords if (isNotEmpty(new_password) && areValidPasswords(new_password, confirm_password)) { Accounts.resetPassword(Session.get('resetPasswordToken'), new_password, function(error) { if (error) { if (error.message === 'Token expired [403]') { Session.set('alert', 'Sorry, this link has expired.'); } else { Session.set('alert', 'Sorry, there was a problem resetting your password.'); } } else { Session.set('alert', 'Your password has been changed.'); // This doesn't show. Display on next page Session.set('resetPasswordToken', ''); // Call done before navigating away from here if (doneCallback) { doneCallback(); } Router.go('web-app'); } }); } return false; } });
Wow, bonne réponse! Avez-vous des idées sur la manière dont cela pourrait être mieux documenté? Les documents sont difficiles à raisonner car il existe tellement de méthodes de comptes différents et qu'il pourrait ne pas être clair comment les utiliser ensemble.
Oui, je comprends complètement votre préoccupation avec les documents et les différentes méthodes. Les deux choses principales que je clarifieriez sont 1) Comment fonctionne exactement la fonction terminée, et si elle doit être transmise à un template.mytemplate.vents gestionnaire (peut-être fournir un exemple de code), et 2) que lorsque les liens sont cliqués, L'application se charge au niveau de la racine.
Cela fait un an depuis cette question mais je viens de trouver le même problème. Après votre solution, ce que j'ai trouvé, c'est que vous pouvez utiliser la variable code> de la section code> dans le routeur et le crochet code> onafteraction code> pour obtenir la même chose, mais à l'aide des itinéraires:
Accounts.onResetPasswordLink(function(token, done){ Session.set('resetPasswordToken', token); doneResetPassword = done; });