Puis-je ajouter quelque chose à la session utilisateur dans un MembershipProvider personnalisé?
-
05-07-2019 - |
Question
J'implémente un MembershipProvider personnalisé afin de transmettre les informations de connexion à un objet métier personnalisé que nous utilisons à plusieurs autres endroits de notre société. Mais une fois l'authentification authentifiée, j'aimerais enregistrer cet objet métier initialisé dans la session pour pouvoir l'utiliser ultérieurement dans d'autres pages. Laissez-moi vous donner un exemple.
public override bool ValidateUser(string username,string password)
{
try
{
// I want to keep this "object" in the Session to be used later on
CustomBusinessObject object = new CustomBusinessObject(username, password);
return true;
}
catch (CustomBusinessAuthenticationException)
{
return false;
}
}
Y at-il un moyen pour moi de faire cela? Je n'ai pas immédiatement trouvé le moyen d'obtenir un accès à l'objet Session en implémentant ce MembershipProvider personnalisé.
La solution
Vous pouvez accéder à la session en appelant System.Web.HttpContext.Current. Créez simplement une propriété personnalisée sur votre fournisseur d’appartenance personnalisé qui vérifie si HttpContext.Current est null et si tel est le cas, renvoie null, sinon accédez à la valeur de la session en conséquence.
public object CustomObject
{
get
{
if(System.Web.HttpContext.Current == null)
{
return null;
}
return System.Web.HttpContext.Current.Session["CustomObject"];
}
set
{
if(System.Web.HttpContext.Current != null)
{
System.Web.HttpContext.Current.Session["CustomObject"] = value;
}
}
}
Autres conseils
Vous devriez pouvoir accéder à System.Web.HttpContext.Current.Session
.
N'oubliez pas que System.Web.HttpContext
sera null
si votre fournisseur est déjà utilisé en dehors du pipeline ASP.Net et qu'il est utilisé à l'intérieur de votre vous couplerez étroitement votre fournisseur à ASP.Net.