diff --git a/locale/translations.go b/locale/translations.go
index ffaa02bdd046abddb00561d75b45f8d2b2731f4e..749e964a856f5a2358296b39830f183e401ce77c 100644
--- a/locale/translations.go
+++ b/locale/translations.go
@@ -1,5 +1,5 @@
 // Code generated by go generate; DO NOT EDIT.
-// 2017-12-28 18:55:07.409784145 -0800 PST m=+0.036504731
+// 2017-12-29 14:12:55.369940267 -0800 PST m=+0.042539315
 
 package locale
 
@@ -209,12 +209,13 @@ var translations = map[string]string{
     "Download original content": "Télécharger le contenu original",
     "Toggle bookmark": "Ajouter/Enlever favoris",
     "Close modal dialog": "Fermer la boite de dialogue",
-    "Save article": "Sauvegarder l'article"
+    "Save article": "Sauvegarder l'article",
+    "There is already someone associated with this provider!": "Il y a déjà quelqu'un d'associé avec ce provider !"
 }
 `,
 }
 
 var translationsChecksums = map[string]string{
 	"en_US": "6fe95384260941e8a5a3c695a655a932e0a8a6a572c1e45cb2b1ae8baa01b897",
-	"fr_FR": "30f70cf369dae3e0461e44a444be56d657d7d381801c321e7312886e75278c81",
+	"fr_FR": "710be25933b58ab1449ec8797696cf937d4854fa0e9db555e2ef8fadd09b4382",
 }
diff --git a/locale/translations/fr_FR.json b/locale/translations/fr_FR.json
index e56083d439b8717ba1c53dfb13cc4e210a135534..f0086d0ce4f0fcedeb86772bc274a98f5c23932e 100644
--- a/locale/translations/fr_FR.json
+++ b/locale/translations/fr_FR.json
@@ -193,5 +193,6 @@
     "Download original content": "Télécharger le contenu original",
     "Toggle bookmark": "Ajouter/Enlever favoris",
     "Close modal dialog": "Fermer la boite de dialogue",
-    "Save article": "Sauvegarder l'article"
+    "Save article": "Sauvegarder l'article",
+    "There is already someone associated with this provider!": "Il y a déjà quelqu'un d'associé avec ce provider !"
 }
diff --git a/server/core/context.go b/server/core/context.go
index dfd8e5b3ae05776788bf7b18b913a7debc785477..d80ce1f8cb763061008e33e09af553de16b7e8f0 100644
--- a/server/core/context.go
+++ b/server/core/context.go
@@ -135,7 +135,7 @@ func (c *Context) SetFlashErrorMessage(message string) {
 
 // FlashErrorMessage returns the error flash message and remove it.
 func (c *Context) FlashErrorMessage() string {
-	message := c.getContextStringValue(middleware.FlashMessageContextKey)
+	message := c.getContextStringValue(middleware.FlashErrorMessageContextKey)
 	c.store.UpdateSessionField(c.SessionID(), "flash_error_message", "")
 	return message
 }
diff --git a/server/ui/controller/controller.go b/server/ui/controller/controller.go
index 8a45912b706f3006dc5613dbf09fbd3feed5bd93..8555c7b887eba1f5fab9db7310de8602b91cdf2f 100644
--- a/server/ui/controller/controller.go
+++ b/server/ui/controller/controller.go
@@ -44,11 +44,12 @@ func (c *Controller) getCommonTemplateArgs(ctx *core.Context) (tplParams, error)
 	}
 
 	params := tplParams{
-		"menu":         "",
-		"user":         user,
-		"countUnread":  countUnread,
-		"csrf":         ctx.CSRF(),
-		"flashMessage": ctx.FlashMessage(),
+		"menu":              "",
+		"user":              user,
+		"countUnread":       countUnread,
+		"csrf":              ctx.CSRF(),
+		"flashMessage":      ctx.FlashMessage(),
+		"flashErrorMessage": ctx.FlashErrorMessage(),
 	}
 	return params, nil
 }
diff --git a/server/ui/controller/oauth2.go b/server/ui/controller/oauth2.go
index 25899ff2326bf3fe296864d33cd708ae96c009b8..2aaa5d7da1540e98a778020bd2c6d4eca03e948d 100644
--- a/server/ui/controller/oauth2.go
+++ b/server/ui/controller/oauth2.go
@@ -71,7 +71,20 @@ func (c *Controller) OAuth2Callback(ctx *core.Context, request *core.Request, re
 	}
 
 	if ctx.IsAuthenticated() {
-		user := ctx.LoggedUser()
+		user, err := c.store.UserByExtraField(profile.Key, profile.ID)
+		if err != nil {
+			response.HTML().ServerError(err)
+			return
+		}
+
+		if user != nil {
+			logger.Error("[OAuth2] User #%d cannot be associated because %s is already associated", ctx.UserID(), user.Username)
+			ctx.SetFlashErrorMessage(ctx.Translate("There is already someone associated with this provider!"))
+			response.Redirect(ctx.Route("settings"))
+			return
+		}
+
+		user = ctx.LoggedUser()
 		if err := c.store.UpdateExtraField(user.ID, profile.Key, profile.ID); err != nil {
 			response.HTML().ServerError(err)
 			return