无法检测用户角色

时间:2015-10-23 07:02:48

标签: c# asp.net visual-studio-2010 roleprovider login-control

使用asp.net和c#以及visual studio 2010 我有一个登录页面和一个登录控件,我做了一些事情,当用户尝试登录时,它会检测用户角色。这是我的代码:

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
        }
    }
}  

然后,当我登录时,它会检测到错误的角色,例如我使用Admin用户登录,但它会将其检测为学生! 正如您在代码中看到的那样,它会将我重定向到页面(HomeStudent.aspx)。

以下是我的角色经理的观点:Click here to see the image of my role manager

您认为问题是什么?我该怎么办?!!

2 个答案:

答案 0 :(得分:0)

在发布登录表单时,但在用户通过身份验证之前会触发事件LoggingIn(请检查msdn)。

您应该在Roles.IsUserInRole("yourRole")事件上检查LoggedIn,而不是LoggingIn

答案 1 :(得分:0)

我找到了解决方案并通过将代码更改为此来解决了我的问题:

 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
    }