So gibt es viele Tutorials online, wie man oAuth mit ASP.NET arbeiten kann, sogar ein Tutorial, wie Rollen für die angemeldeten Accounts mit MVC gesetzt werden, aber keine Diese Tutorials erklären, was als nächstes kommt. Wie heißt das, wenn Sie einen Nutzer, den Sie bei Google registriert haben, mit der Person oder dem Nutzermodell in Ihrer App verbinden? Wie handeln Sie als eine dieser Personen, basierend darauf, wer Sie wie bei Google angemeldet haben? Ich habe herausgefunden, wie man den Vor- und Nachnamen und all diesen Jazz registriert, aber ich bin mir immer noch nicht sicher, wie ich es machen soll, damit ich in der Person bin oder agiere.OAuth mit Benutzer- oder Personenmodell in ASP.NET MVC verbinden C#
Zum Beispiel habe ich eine Person Modell und einige andere Modelle, die von der Person Modell erben, wie Ingenieur und Manager:
public class Person
{
[Key]
public int PersonId { get; set; }
[Required(ErrorMessage = "The First Name field is required.")]
[Display(Name = "First Name")]
[MaxLength(50)]
public string FirstName { get; set; }
[Required(ErrorMessage = "The Last Name field is required.")]
[Display(Name = "Last Name")]
[MaxLength(50)]
public string LastName { get; set; }
[NotMapped]
[Display(Name = "Name")]
public string FullName
{
get
{
return FirstName + " " + LastName;
}
}
}
public class Engineer : Person
{
public ICollection<Manager> managers { get; set; }
}
public class Manager : Person
{
public ICollection<Engineer> engineers { get; set; }
}
Hier habe ich folgendes für die Account hinzugefügt:
[AllowAnonymous]
public async Task<ActionResult> ExternalLoginCallback(string returnUrl)
{
string firstName;
string lastName;
var loginInfo = await AuthenticationManager.GetExternalLoginInfoAsync();
if (loginInfo == null)
{
return RedirectToAction("Login");
}
if (loginInfo.Login.LoginProvider == "Google")
{
var externalIdentity = AuthenticationManager.GetExternalIdentityAsync(DefaultAuthenticationTypes.ExternalCookie);
var emailClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Email);
var lastNameClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.Surname);
var givenNameClaim = externalIdentity.Result.Claims.FirstOrDefault(c => c.Type == ClaimTypes.GivenName);
firstName = givenNameClaim.Value;
lastName = lastNameClaim.Value;
} else
{
firstName = "Error";
lastName = "Error";
}
// Sign in the user with this external login provider if the user already has a login
var result = await SignInManager.ExternalSignInAsync(loginInfo, isPersistent: false);
switch (result)
{
case SignInStatus.Success:
return RedirectToLocal(returnUrl);
case SignInStatus.LockedOut:
return View("Lockout");
case SignInStatus.RequiresVerification:
return RedirectToAction("SendCode", new { ReturnUrl = returnUrl, RememberMe = false });
case SignInStatus.Failure:
default:
// If the user does not have an account, then prompt the user to create an account
ViewBag.ReturnUrl = returnUrl;
ViewBag.LoginProvider = loginInfo.Login.LoginProvider;
return View("ExternalLoginConfirmation", new ExternalLoginConfirmationViewModel { Email = loginInfo.Email, FirstName = firstName, LastName = lastName });
}
Und die Kontoansicht Modell:
public class ExternalLoginConfirmationViewModel
{
[Required]
[Display(Name = "Email")]
public string Email { get; set; }
[Required]
[Display(Name = "First Name")]
public string FirstName { get; set; }
[Required]
[Display(Name = "Last Name")]
public string LastName { get; set; }
}
wie melde ich mich in w its google und dann eine der Personen sein? Wie heißt das überhaupt? Gibt es einen Namen dafür? Ich nehme an, jeder macht das irgendwann. Ich kann Personen, Manager und Ingenieure in meiner Initialisierungsklasse erstellen, aber ich weiß nicht, wie ich das mit oAuth machen soll.
Hinweis, ich würde es vorziehen, alle Benutzer zu zwingen, sich mit Google anzumelden, anstatt ein lokales Benutzerkonto zu erstellen, so dass ich mich nicht um die Registrierung von Websitekonten kümmerte.
Auch für eine gute Maßnahme ist hier meine IdentityModel:
public class ApplicationUser : IdentityUser
{
public string FirstName { get; set; }
public string LastName { get; set; }
public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
{
// Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
// Add custom user claims here
return userIdentity;
}
}
Sprechen Sie über soziale Logins? –
Ich spreche über Google OAUTH. Hinzufügen der OAuth-Daten zu dem Benutzer oder der Personenklasse. Ich habe meinen Beitrag noch einmal mit weiteren Details aktualisiert. –
Während des Aufrufs von --award SignInManager.ExternalSignInAsync wird Ihr externes Zugriffstoken zum Generieren eines lokalen Zugriffstokens verwendet. Willst du etwas über Identitätsdiebstahl fragen? –