2016-08-06 20 views
0

ログインが成功するたびに、ユーザーをデフォルトのURL(Default.aspx)ページにリダイレクトすることができました。今私は、管理者ではないスタッフがログインページ(Unauthorized.aspx)にアクセスしようとしていることを、デフォルトのページに確実にしたい。私は2つのasp.netページ(Default.apsxとUnauthorized.aspx)を使用しています。しかし、問題は、管理者が別のページ(Unauthorized.apsx)にリダイレクトする代わりに、デフォルトのURLページに行くmary tanを使用する場合です。ここに私のエラーは、次のとおりです。デフォルトのURL以外のページにリダイレクトする

スタッフとAdmin:

click image

出力:

view output

のWeb.config:コーディング

<authentication mode="Forms"> 
     <forms loginUrl="~/Login.aspx" defaultUrl="~/Default.aspx" slidingExpiration="true" timeout="20"></forms> 
    </authentication> 

Login.aspx.cs :

public partial class Login : System.Web.UI.Page 
    { 
     SqlConnection conn = null; 
     SqlCommand cmd = null; 
     string connectionString = null; 
     string staffName = null; 
     string staffId = null; 
     string role = null; 
     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 

     public bool CheckValidUser(string Username, string Password) 
     { 
      bool valid = false; 
      SqlDataReader dr = null; 

      connectionString = ConfigurationManager.ConnectionStrings["LeaveManagementCS"].ConnectionString; 

      string sql = "SELECT * from Staff WHERE [email protected] AND [email protected] And Role=N'A' OR Role=N'S'"; 

      try 
      { 
       conn = new SqlConnection(connectionString); 

       cmd = new SqlCommand(sql, conn); 

       cmd.Parameters.AddWithValue("@Username", Username); 
       cmd.Parameters.AddWithValue("@Pwd", Password); 

       conn.Open(); 

       dr = cmd.ExecuteReader(); 

       if (dr.Read()) 
       { 
        staffName = dr["StaffName"].ToString(); 
        staffId = dr["StaffId"].ToString(); 
        role = dr["Role"].ToString(); 

        valid = true; 
       } 
       else 
       { 
        lblOutput.Text = "There is an error logging in. Please check username or password."; 
       } 
       dr.Close(); 
      } 
      catch (Exception ex) 
      { 
       lblOutput.Text = "Error Message: " + ex.Message; 
      } 
      finally 
      { 
       if (conn != null) 
        conn.Close(); 
      } 
      return valid; 
     } 

     protected void tbLogin_Click(object sender, EventArgs e) 
     { 
      bool validUser = CheckValidUser(tbUsername.Text, tbPassword.Text); 

      if (validUser) 
      { 
       Session["StaffName"] = staffName; 
       FormsAuthentication.SetAuthCookie(staffName, false); 
       FormsAuthentication.RedirectFromLoginPage(staffName, false); 

       Session["StaffId"] = staffId; 
       FormsAuthentication.SetAuthCookie(staffId, false); 
       FormsAuthentication.RedirectFromLoginPage(staffId, false); 

       Session["Role"] = role; 
       FormsAuthentication.SetAuthCookie(role, true); 
       Response.Redirect("~/Unauthorized.aspx"); 

      } 
      else 
      { 

       lblOutput.Text = "Invalid User. Please try again."; 
      } 
     } 
    } 

答えて

1

問題があれば、私はちょうど正しいページにリダイレクトするには、ここif文で投げると思いますが、不正なページに

Response.Redirect("~/Unauthorized.aspx"); 

を有効なユーザーをリダイレクト常にある、ログインコード中にありますユーザーは特定の役割を担っています(ASP.NET Identity Roles systemを使用してページがロックされていることを確認してください)

関連する問題