From dc405e53da567772a50a60e98a3728c6a1ccdfd1 Mon Sep 17 00:00:00 2001 From: Bruno Alves de Faria Date: Fri, 24 Mar 2017 18:45:32 -0300 Subject: [PATCH] Allowing alternative authentication methods on ohif:user package --- .../client/components/login/userLogin.js | 33 ++++++++++++------- Packages/ohif-user/client/lib/index.js | 1 + Packages/ohif-user/client/lib/login.js | 14 ++++++++ Packages/ohif-user/package.js | 3 +- 4 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 Packages/ohif-user/client/lib/login.js diff --git a/Packages/ohif-user/client/components/login/userLogin.js b/Packages/ohif-user/client/components/login/userLogin.js index d898c8d8b..3dbe1e32f 100644 --- a/Packages/ohif-user/client/components/login/userLogin.js +++ b/Packages/ohif-user/client/components/login/userLogin.js @@ -2,6 +2,7 @@ import { Meteor } from 'meteor/meteor'; import { Template } from 'meteor/templating'; import { SimpleSchema } from 'meteor/aldeed:simple-schema'; import { Router } from 'meteor/iron:router'; +import { OHIF } from 'meteor/ohif:core'; Template.userLogin.onCreated(() => { const instance = Template.instance(); @@ -17,20 +18,30 @@ Template.userLogin.onCreated(() => { // Get the form data const formData = form.value(); - // Call the Meteor's login method - Meteor.loginWithPassword(formData.username, formData.password, error => { - if (!error) { - const currentRoute = Router.current(); - const redirect = currentRoute.params.query.redirect; - const path = redirect ? decodeURI(redirect) : '/'; - return Router.go(path); - } - - const { reason } = error; + // Handle errors and display the error message on the respective field + const errorHandler = error => { + const reason = (error && error.reason) || 'An error has ocurred'; const isPassword = reason && reason.toLowerCase().indexOf('password') > -1; const displayComponent = form.item(isPassword ? 'password' : 'username'); displayComponent.error(reason); - displayComponent.$element.focus(); + Meteor.defer(() => displayComponent.$element.focus()); + }; + + // Handle success and redirect the user + const successHandler = () => { + const currentRoute = Router.current(); + const redirect = currentRoute.params.query.redirect; + const path = redirect ? decodeURI(redirect) : '/'; + return Router.go(path); + }; + + // Call the login method + const promise = OHIF.user.login(formData).then(successHandler).catch(errorHandler); + + // Display loading state + OHIF.ui.showDialog('dialogLoading', { + text: 'Signing in...', + promise }); } }; diff --git a/Packages/ohif-user/client/lib/index.js b/Packages/ohif-user/client/lib/index.js index c1fec9016..95230ab0e 100644 --- a/Packages/ohif-user/client/lib/index.js +++ b/Packages/ohif-user/client/lib/index.js @@ -1,2 +1,3 @@ import './getName'; +import './login'; import './logout'; diff --git a/Packages/ohif-user/client/lib/login.js b/Packages/ohif-user/client/lib/login.js new file mode 100644 index 000000000..0404f92f8 --- /dev/null +++ b/Packages/ohif-user/client/lib/login.js @@ -0,0 +1,14 @@ +import { Meteor } from 'meteor/meteor'; +import { OHIF } from 'meteor/ohif:core'; + +OHIF.user.login = params => { + return new Promise((resolve, reject) => { + Meteor.loginWithPassword(params.username, params.password, error => { + if (error) { + return reject(error); + } + + resolve(); + }); + }); +}; diff --git a/Packages/ohif-user/package.js b/Packages/ohif-user/package.js index f6c0d5306..1f9ba0fb3 100644 --- a/Packages/ohif-user/package.js +++ b/Packages/ohif-user/package.js @@ -10,7 +10,8 @@ Package.onUse(function(api) { // Meteor client and server packages api.use([ 'ecmascript', - 'accounts-base' + 'accounts-base', + 'accounts-password' ]); // Meteor client-only packages