From 5d4d7cecfe013d3f51eb7194f337a5a8bb1dc71d Mon Sep 17 00:00:00 2001 From: Igor Freire Date: Sat, 28 Feb 2015 19:09:12 -0300 Subject: [PATCH] Make emails unique Emails are made unique. When user attempts to sign in through a provider in which his email is one that is already registered, user is redirected to the signin page with an error passed as a query string parameter. --- .../core/server/controllers/errors.server.controller.js | 4 ++-- modules/users/client/config/users.client.routes.js | 2 +- .../controllers/authentication.client.controller.js | 3 +++ .../client/views/authentication/signin.client.view.html | 8 ++++---- .../users/users.authentication.server.controller.js | 9 ++++++--- modules/users/server/models/user.server.model.js | 1 + 6 files changed, 17 insertions(+), 10 deletions(-) diff --git a/modules/core/server/controllers/errors.server.controller.js b/modules/core/server/controllers/errors.server.controller.js index db81a8ec..935a9299 100644 --- a/modules/core/server/controllers/errors.server.controller.js +++ b/modules/core/server/controllers/errors.server.controller.js @@ -8,10 +8,10 @@ var getUniqueErrorMessage = function(err) { try { var fieldName = err.err.substring(err.err.lastIndexOf('.$') + 2, err.err.lastIndexOf('_1')); - output = fieldName.charAt(0).toUpperCase() + fieldName.slice(1) + ' already exist'; + output = fieldName.charAt(0).toUpperCase() + fieldName.slice(1) + ' already exists'; } catch(ex) { - output = 'Unique field already exist'; + output = 'Unique field already exists'; } return output; diff --git a/modules/users/client/config/users.client.routes.js b/modules/users/client/config/users.client.routes.js index 9b054636..4c00bc06 100644 --- a/modules/users/client/config/users.client.routes.js +++ b/modules/users/client/config/users.client.routes.js @@ -36,7 +36,7 @@ angular.module('users').config(['$stateProvider', templateUrl: 'modules/users/views/authentication/signup.client.view.html' }). state('authentication.signin', { - url: '/signin', + url: '/signin?err', templateUrl: 'modules/users/views/authentication/signin.client.view.html' }). state('password', { diff --git a/modules/users/client/controllers/authentication.client.controller.js b/modules/users/client/controllers/authentication.client.controller.js index a1b349f4..fed92257 100644 --- a/modules/users/client/controllers/authentication.client.controller.js +++ b/modules/users/client/controllers/authentication.client.controller.js @@ -4,6 +4,9 @@ angular.module('users').controller('AuthenticationController', ['$scope', '$http function($scope, $http, $location, Authentication) { $scope.authentication = Authentication; + // Get an eventual error defined in the URL query string: + $scope.error = $location.search().err; + // If user is signed in then redirect back home if ($scope.authentication.user) $location.path('/'); diff --git a/modules/users/client/views/authentication/signin.client.view.html b/modules/users/client/views/authentication/signin.client.view.html index 5345a5dc..0d78a139 100644 --- a/modules/users/client/views/authentication/signin.client.view.html +++ b/modules/users/client/views/authentication/signin.client.view.html @@ -18,12 +18,12 @@   or  Sign up -
+ -
- -
+ + +
diff --git a/modules/users/server/controllers/users/users.authentication.server.controller.js b/modules/users/server/controllers/users/users.authentication.server.controller.js index d2c5acd2..ea4c9e5e 100644 --- a/modules/users/server/controllers/users/users.authentication.server.controller.js +++ b/modules/users/server/controllers/users/users.authentication.server.controller.js @@ -83,12 +83,15 @@ exports.signout = function (req, res) { exports.oauthCallback = function (strategy) { return function (req, res, next) { passport.authenticate(strategy, function (err, user, redirectURL) { - if (err || !user) { - return res.redirect('/#!/signin'); + if (err) { + return res.redirect('/authentication/signin?err=' + encodeURIComponent(errorHandler.getErrorMessage(err))); + } + if (!user) { + return res.redirect('/authentication/signin'); } req.login(user, function (err) { if (err) { - return res.redirect('/#!/signin'); + return res.redirect('/authentication/signin'); } return res.redirect(redirectURL || '/'); diff --git a/modules/users/server/models/user.server.model.js b/modules/users/server/models/user.server.model.js index 3f2225e6..4ffd1f17 100644 --- a/modules/users/server/models/user.server.model.js +++ b/modules/users/server/models/user.server.model.js @@ -52,6 +52,7 @@ var UserSchema = new Schema({ email: { type: String, trim: true, + unique: true, default: '', validate: [validateLocalStrategyEmail, 'Please fill a valid email address'] },