Ich erstelle eine Web Forms-Website, die die ASP-Authentifizierung und zwei Datenbanken zum Speichern von Daten verwendet. Wenn ein Benutzer registriert es Aufzeichnungen über diese beiden Tabellen erstellt, dies ist mein register.aspx C# -Code:ASP.NET Web Forms erhalten aktuelle Benutzer-E-Mails und weisen Daten zur Benutzeridentität zu
if (result.Succeeded)
{
infoLicencia.license_activations++;
res_users regUser = new res_users
{
branch_gkey = infoLicencia.branch_gkey,
licence_gkey = infoLicencia.license_gkey,
activo = true,
fecha_registro = DateTime.Now,
email = user.Email
};
db.res_users.Add(regUser);
db.SaveChanges();
// Para obtener más información sobre cómo habilitar la confirmación de cuentas y el restablecimiento de contraseña, visite http://go.microsoft.com/fwlink/?LinkID=320771
//string code = manager.GenerateEmailConfirmationToken(user.Id);
//string callbackUrl = IdentityHelper.GetUserConfirmationRedirectUrl(code, user.Id, Request);
//manager.SendEmail(user.Id, "Confirmar cuenta", "Para confirmar la cuenta, haga clic <a href=\"" + callbackUrl + "\">aquí</a>.");
signInManager.SignIn(user, isPersistent: false, rememberBrowser: false);
IdentityHelper.RedirectToReturnUrl(Request.QueryString["ReturnUrl"], Response);
}
Dies funktioniert gut, aber jetzt brauche ich die Daten auf der anderen Datenbank gespeichert sind, abzurufen und zur Verfügung stellen für die Benutzersitzung.
Ich habe versucht, dies auf IdentityModels.cs:
public class ApplicationUser : IdentityUser
{
public ClaimsIdentity GenerateUserIdentity(ApplicationUserManager manager)
{
// Tenga en cuenta que authenticationType debe coincidir con el valor definido en CookieAuthenticationOptions.AuthenticationType
var userIdentity = manager.CreateIdentity(this, DefaultAuthenticationTypes.ApplicationCookie);
// Agregar reclamaciones de usuario personalizadas aquí
var Database2 = new PPublicEntities();
var UserData = Database2.res_users.Single(i => i.email == Email);
userIdentity.AddClaim(new Claim("BranchId", UserData.branch_gkey.ToString()));
return userIdentity;
}
public Task<ClaimsIdentity> GenerateUserIdentityAsync(ApplicationUserManager manager)
{
return Task.FromResult(GenerateUserIdentity(manager));
}
}
Aber diese E-Mail-Eigenschaft ist null, ich brauche die aktuellen Benutzer E-Mail für die Daten auf der anderen Datenbank zu suchen. Ich dachte, dass diese E-Mail-Eigenschaft bei der Anmeldung ausgefüllt wurde, ich weiß wirklich nicht, was zu tun ist, auch warum alle Anspruchswerte String sein müssen? Ich wünschte wirklich, es könnte ein langer Typ sein.
Im ein Neuling auf asp net, was macht Constants.EmailClaimType? Und diese Methode wo wird erklärt? Auf IdentityModels oder woanders? –
Constants.EmailClaimType könnte eine beliebige konstante Zeichenfolge sein. Ich habe es als "ASP.NET.UserEmailClaim" deklariert, so dass dasselbe verwendet werden kann, wenn wir von Benutzeransprüchen lesen. Ich habe eine vollständige Bibliothek über das Identitätsframework erstellt und diese Methode wird dort deklariert. Ich habe die GItHub-Repo-Adresse oben bereits geteilt. Sie können diese und andere Methoden in der IdentityClaimsHelper.cs-Klasse finden. Lass es mich wissen, wenn du etwas anderes wissen willst. –