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.
This commit is contained in:
Igor Freire
2015-02-28 19:09:12 -03:00
parent e1605b635b
commit 5d4d7cecfe
6 changed files with 17 additions and 10 deletions

View File

@@ -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;

View File

@@ -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', {

View File

@@ -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('/');

View File

@@ -18,12 +18,12 @@
  or 
<a data-ui-sref="authentication.signup">Sign up</a>
</div>
<div class="forgot-password">
<div class="text-center forgot-password">
<a data-ui-sref="password.forgot">Forgot your password?</a>
</div>
<div data-ng-show="error" class="text-center text-danger">
<strong data-ng-bind="error"></strong>
</div>
<alert type="danger" data-ng-show="error" class="text-center text-danger">
<span data-ng-bind="error"></span>
</alert>
</fieldset>
</form>
</div>

View File

@@ -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 || '/');

View File

@@ -52,6 +52,7 @@ var UserSchema = new Schema({
email: {
type: String,
trim: true,
unique: true,
default: '',
validate: [validateLocalStrategyEmail, 'Please fill a valid email address']
},