Authentification par formulaire: affiche les informations sur l'utilisateur actuellement connecté dans FormView à l'aide de la source de données d'objet.
-
06-07-2019 - |
Question
Dans mon application Web, j'utilise l'authentification par formulaires avec un cookie. Dans une page, je souhaite afficher les informations relatives à l'utilisateur actuellement connecté, dans un FormView alimenté par un ObjectDataSource. Ma source de données a une méthode de sélection acceptant en paramètre le nom d'utilisateur sous lequel les données de l'utilisateur seront demandées à la base de données. Comment puis-je obtenir le nom d'utilisateur de l'utilisateur actuellement connecté et l'utiliser comme paramètre de sélection pour la source de données.
La solution 2
Au lieu de cela, j'ai choisi d'utiliser l'événement de sélection de la source de données et d'ajouter les informations dont j'avais besoin en tant que inputParameter.
Autres conseils
Sur Global.asax .. vous devriez écrire:
protected void Application_AuthenticateRequest(object sender, EventArgs e) {
if (Request.PhysicalPath.EndsWith(".aspx") || Request.PhysicalPath.EndsWith(".axd"))
SecurityManager.SetPrincipal();
}
La méthode SecurityManager.SetPrincipal () doit ressembler à:
// variable we'll use to set HttpContext.Current.User
IPrincipal principal = null;
FormsIdentity identity;
//IsAuthenticated will be automatically set by .NET framework
if (HttpContext.Current.Request.IsAuthenticated)
{
// (FormsIdentity)HttpContext.Current.User.Identity will
// be filled automatically by the .NET framework when using forms authentication
identity = (FormsIdentity)HttpContext.Current.User.Identity;
// This User class must be defined BY YOU
User userProfile;
// this user data is the data that you entered when you created the ticket.
// this should be a security token that would allow you to GET THE USER FROM IT
String userData = (((FormsIdentity)identity).Ticket).UserData;
try
{
// UserHelper is a class that must be able to OBTAIN a USER given a SECURITY TOKEN.
// remember, you created this token when you created the ticket you used in the cookie.
userProfile = UserHelper.GetUser(userData);
// AuthenticatedPrincipal must implement IPrincipal. Consider deriving from GenericPrincipal.
// Your IPrincipal implementations must hold a reference to the UserClass you created
principal = new AuthenticatedPrincipal(identity, userProfile);
}
catch
{
FormsAuthentication.SignOut();
// This is analogous to AuthenticatedPrincipal
principal = new AnonymousPrincipal(new GuestIdentity(), UserHelper.GetUser(null));
}
}
else
{
principal = new AnonymousPrincipal(new GuestIdentity(), UserHelper.GetUser(null));
}
// Now we make our principal, that holds a reference to the currently
// logged user, globally visible
HttpContext.Current.User = principal;
Autant que je sache, ObjectDataSource vous permet d'écrire une classe de couche d'accès aux données et de mapper certaines méthodes de cette classe aux opérations DataSource. Vous pouvez accéder à HttpContext.Current.User à partir de ces méthodes.
Comme vous l'avez dit, "Dans mon application Web, j'utilise l'authentification par formulaires avec un cookie". Je suppose que vous savez comment vous "connecter". l'utilisateur et envoyez le cookie au navigateur. Si vous avez des problèmes avec cela, faites le moi savoir.