2015-10-23 4 views
0

Utiliser asp.net et C# et visual studio 2010 J'ai une page de connexion et un contrôle de connexion dedans et je fais quelque chose qui quand un utilisateur essaie de se connecter, il va détecter l'utilisateur rôle. Voici mon code:Impossible de détecter le rôle de l'utilisateur

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Web; 
using System.Web.UI; 
using System.Web.UI.WebControls; 
using System.Configuration; 
using System.Data.SqlClient; 
using System.Web.Security; 

public partial class Login : System.Web.UI.Page 
{ 
    protected void Page_Load(object sender, EventArgs e) 
    { 

    } 
    protected void Login1_LoggedIn(object sender, EventArgs e) 
    { 
     if (Session["Admin"] != null) 
     { 
      Response.Redirect("~/Admin/HomeAdmin.aspx"); 
     } 
     else if (Session["Professor"] != null) 
     { 
      Response.Redirect("~/Professor/HomeProfessor.aspx"); 
     } 
     else if (Session["Student"] != null) 
     { 
      Response.Redirect("~/Student/HomeStudent.aspx"); 
     }    
    } 

    protected void Login1_LoggingIn(object sender, LoginCancelEventArgs e) 
    { 
     if (Roles.IsUserInRole("Administor")) 
     { 
      Session["Admin"] = Login1.UserName; 
      //only run for admins 
     } 




     else if (Roles.IsUserInRole("Professor")) 
     { 
      Session["Professor"] = Login1.UserName; 
      //only run for professors 
     } 





     else if (Roles.IsUserInRole("Student")) 
     { 
      Session["Student"] = Login1.UserName; 
      //only run for students 
     } 
    } 
} 

Puis, quand je me connecte, il détecte le mauvais rôle, par exemple je me connecte avec un utilisateur Admin mais il détectera comme un étudiant! Et comme vous le voyez dans le code, il me redirigera vers la page (HomeStudent.aspx).

est ici une vue de mon rôle de gestionnaire: Click here to see the image of my role manager

Que pensez-vous est le problème et que dois-je faire? !!

+0

Pourquoi ne mettez-vous pas le rôle dans une 'session [ « rôle »]' et attribuer une valeur différente à chaque connexion . Ensuite, sur l'événement 'Login1_LoggingIn', vous pouvez d'abord réinitialiser votre session avec' Session.Clear() ', puis l'affecter à la nouvelle valeur – Ange1

+0

Vous voulez créer 3 pages de connexion? (pour chaque rôle une page de connexion?) –

+0

Non, pas du tout. Juste la Session ["Rôle"] aura trois valeurs, basées sur le rôle connecté, comme ceci: 'if (Roles.IsUserInRole (" Administor ")) { Session [" Role "] =" Administrateur "; // Exécuter uniquement pour les administrateurs } sinon if (Roles.IsUserInRole ("Professor")) { Session ["Role"] = "Professor"; // exécute uniquement pour les professeurs } ' puis appelle la valeur de la Session, au lieu de vérifier si elle est' null'. Je n'ai pas vérifié au détail le code ci-dessus, mais probablement cela devrait fonctionner – Ange1

Répondre

0

J'ai trouvé la solution et a résolu mon problème en changeant les codes à ceci:

if (Roles.IsUserInRole(Login1.UserName , "Administor")) 
    { 
     Session["Admin"] = Login1.UserName; 
     Response.Redirect("~/Admin/HomeAdmin.aspx");  
     //only run for admins 

    } 


    else if (Roles.IsUserInRole(Login1.UserName , "Professor")) 
    { 
     Session["Professor"] = Login1.UserName; 
     Response.Redirect("~/Professor/HomeProfessor.aspx"); 
     //only run for professors 
    } 



    else if (Roles.IsUserInRole(Login1.UserName , "Student")) 
    { 
     Session["Student"] = Login1.UserName; 
     Response.Redirect("~/Student/HomeStudent.aspx"); 
     //only run for students 
    } 
0

L'événement LoggingIn est déclenché lorsque le formulaire de connexion est envoyé, mais avant que l'utilisateur ne soit authentifié (vérifiez sur msdn).

Vous devez vérifier Roles.IsUserInRole("yourRole") sur LoggedIn événement plutôt que LoggingIn.

+0

Ce que je faisais d'abord était la chose que vous avez dit ... Mais j'ai toujours eu ce problème –

+0

Si vous exécutez 'Roles.GetRolesForUser()' à l'intérieur de l'événement LoggedIn, que retourne-t-il? –

+0

Je ne me donne rien! –