mirror of
				https://github.com/NodeBB/NodeBB.git
				synced 2025-10-31 11:05:54 +01:00 
			
		
		
		
	prevent double follow/unfollow
This commit is contained in:
		| @@ -282,28 +282,24 @@ SocketUser.follow = function(socket, data, callback) { | |||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	toggleFollow('follow', socket.uid, data.uid, function(err) { | 	async.waterfall([ | ||||||
| 		if (err) { | 		function(next) { | ||||||
| 			return callback(err); | 			toggleFollow('follow', socket.uid, data.uid, next); | ||||||
| 		} | 		}, | ||||||
|  | 		function(next) { | ||||||
| 		user.getUserFields(socket.uid, ['username', 'userslug'], function(err, userData) { | 			user.getUserFields(socket.uid, ['username', 'userslug'], next); | ||||||
| 			if (err) { | 		}, | ||||||
| 				return callback(err); | 		function(userData, next) { | ||||||
| 			} |  | ||||||
|  |  | ||||||
| 			notifications.create({ | 			notifications.create({ | ||||||
| 				bodyShort: '[[notifications:user_started_following_you, ' + userData.username + ']]', | 				bodyShort: '[[notifications:user_started_following_you, ' + userData.username + ']]', | ||||||
| 				nid: 'follow:' + data.uid + ':uid:' + socket.uid, | 				nid: 'follow:' + data.uid + ':uid:' + socket.uid, | ||||||
| 				from: socket.uid | 				from: socket.uid | ||||||
| 			}, function(err, notification) { | 			}, next); | ||||||
| 				if (!err && notification) { | 		}, | ||||||
| 					notifications.push(notification, [data.uid]); | 		function(notification, next) { | ||||||
|  | 			notifications.push(notification, [data.uid], next); | ||||||
| 		} | 		} | ||||||
| 				callback(err); | 	], callback); | ||||||
| 			}); |  | ||||||
| 		}); |  | ||||||
| 	}); |  | ||||||
| }; | }; | ||||||
|  |  | ||||||
| SocketUser.unfollow = function(socket, data, callback) { | SocketUser.unfollow = function(socket, data, callback) { | ||||||
|   | |||||||
| @@ -23,7 +23,15 @@ module.exports = function(User) { | |||||||
| 			return callback(new Error('[[error:you-cant-follow-yourself]]')); | 			return callback(new Error('[[error:you-cant-follow-yourself]]')); | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
|  | 		User.isFollowing(uid, theiruid, function(err, isFollowing) { | ||||||
|  | 			if (err) { | ||||||
|  | 				return callback(err); | ||||||
|  | 			} | ||||||
|  |  | ||||||
| 			if (type === 'follow') { | 			if (type === 'follow') { | ||||||
|  | 				if (isFollowing) { | ||||||
|  | 					return callback(new Error('[[error:already-following]]')); | ||||||
|  | 				} | ||||||
| 				var now = Date.now(); | 				var now = Date.now(); | ||||||
| 				async.parallel([ | 				async.parallel([ | ||||||
| 					async.apply(db.sortedSetAdd, 'following:' + uid, now, theiruid), | 					async.apply(db.sortedSetAdd, 'following:' + uid, now, theiruid), | ||||||
| @@ -32,6 +40,9 @@ module.exports = function(User) { | |||||||
| 					async.apply(User.incrementUserFieldBy, theiruid, 'followerCount', 1) | 					async.apply(User.incrementUserFieldBy, theiruid, 'followerCount', 1) | ||||||
| 				], callback); | 				], callback); | ||||||
| 			} else { | 			} else { | ||||||
|  | 				if (!isFollowing) { | ||||||
|  | 					return callback(new Error('[[error:not-following]]')); | ||||||
|  | 				} | ||||||
| 				async.parallel([ | 				async.parallel([ | ||||||
| 					async.apply(db.sortedSetRemove, 'following:' + uid, theiruid), | 					async.apply(db.sortedSetRemove, 'following:' + uid, theiruid), | ||||||
| 					async.apply(db.sortedSetRemove, 'followers:' + theiruid, uid), | 					async.apply(db.sortedSetRemove, 'followers:' + theiruid, uid), | ||||||
| @@ -39,6 +50,7 @@ module.exports = function(User) { | |||||||
| 					async.apply(User.decrementUserFieldBy, theiruid, 'followerCount', 1) | 					async.apply(User.decrementUserFieldBy, theiruid, 'followerCount', 1) | ||||||
| 				], callback); | 				], callback); | ||||||
| 			} | 			} | ||||||
|  | 		}); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	User.getFollowing = function(uid, start, end, callback) { | 	User.getFollowing = function(uid, start, end, callback) { | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user