2

Ich versuche, die Formular-Authentifizierung in ASP.Net Core mit Google und Facebook-Authentifizierungen zu implementieren. Ich folgte ein paar Tutorials und nach einigen Schwierigkeiten schaffte ich es, beides zum Laufen zu bringen.AspNet Core Externe Authentifizierung mit Google und Facebook

Das Problem ist jedoch, dass ich beide Authentifizierungen für die gleiche E-Mail nicht verwenden kann.

Zum Beispiel ist meine E-Mail-Adresse "[email protected]". Ich habe Facebook-Authentifizierung verwendet, um mich zuerst anzumelden ... Registrierte meine E-Mail und es funktionierte erfolgreich und legte meinen Datensatz in 'dbo.ASPNetUsers' Tabelle.

Dann habe ich mich ausgeloggt, klickte auf Google Authentication um mich einzuloggen. Es authentifizierte sich erfolgreich, aber als ich versuchte es zu registrieren, sagte es immer, dass meine Email schon vergeben ist.

enter image description here

Ich habe versucht, das gleiche für andere Online-Websites (zB, Stackoverflow) zu tun. Ich habe die gleiche E-Mail für Google und Facebook verwendet und die Website weiß, dass ich dieselbe Person bin und meine Login/Ansprüche verknüpft sind, obwohl sie von verschiedenen Orten kommen (Google & Facebook).

enter image description here

Ich möchte diese Funktion in meiner Website haben, und könnten Sie bitte lassen Sie mich wissen, wie ich das erreichen konnte.

In der Theorie sollte es eine andere Zeile in "dbo.AspNetUserLogins" setzen und sollte die gleiche UserId mit mehreren Logins verknüpfen.

Muss ich meine eigene SignInManager.SignInAsync-Methode implementieren, um diese Funktion zu erreichen? Oder fehlt mir irgendeine Konfiguration?

enter image description here

+0

in den VS-Vorlagen hinzufügen Sie einen anderen Anbieter von auf die Seite Manage gehen nach dem Einloggen und fügte hinzu, dass Anbieter, nicht zu versuchen, REGI ster als neuer Benutzer. Die Zuordnung per E-Mail-Adresse allein ist nicht stark genug, da die App nicht überprüfen kann, ob Sie diese Adresse wirklich besitzen. – Tratcher

Antwort

1

Sie benötigen Facebook externe Login auf Ihr Google externes Login mit Ihrer E-Mail verknüpfen, indem Sie UserManager.AddLoginAsync, können Sie nicht zweimal registrieren die gleiche Adresse verwenden, wenn Sie die Adresse als Login verwenden.
Überprüfen Sie das Identity-Beispiel auf Identity Github Repo.

https://github.com/aspnet/Identity/blob/dev/samples/IdentitySample.Mvc/Controllers/ManageController.cs

an einen Benutzer externen Anmelden zu verknüpfen, der Manae Controller Methoden belichten LinkLogin und LinkLoginCallback
LinkLogin eine Weiterleitung an die externen Anmeldeanbieter fordert einen Login für den aktuellen Benutzer
LinkLoginCallback verarbeitet den Anbieter zu verbinden Antwort

// 
    // POST: /Manage/LinkLogin 
    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public IActionResult LinkLogin(string provider) 
    { 
     // Request a redirect to the external login provider to link a login for the current user 
     var redirectUrl = Url.Action("LinkLoginCallback", "Manage"); 
     var properties = _signInManager.ConfigureExternalAuthenticationProperties(provider, redirectUrl, _userManager.GetUserId(User)); 
     return Challenge(properties, provider); 
    } 

    // 
    // GET: /Manage/LinkLoginCallback 
    [HttpGet] 
    public async Task<ActionResult> LinkLoginCallback() 
    { 
     var user = await GetCurrentUserAsync(); 
     if (user == null) 
     { 
      return View("Error"); 
     } 
     var info = await _signInManager.GetExternalLoginInfoAsync(await _userManager.GetUserIdAsync(user)); 
     if (info == null) 
     { 
      return RedirectToAction(nameof(ManageLogins), new { Message = ManageMessageId.Error }); 
     } 
     var result = await _userManager.AddLoginAsync(user, info); 
     var message = result.Succeeded ? ManageMessageId.AddLoginSuccess : ManageMessageId.Error; 
     return RedirectToAction(nameof(ManageLogins), new { Message = message }); 
    } 
+0

können Sie mehr Details geben? Wie verlinke ich FB und Google account mit AddLoginAsync? – Alexan

+0

@Alexan Ich aktualisierte die Antwort, ist das klarer –

+0

Code sieht genauso aus, was ich in ManageController jetzt habe. Was genau soll ich ändern? – Alexan

Verwandte Themen