<authentication mode =“Forms”>不起作用?

时间:2017-03-30 13:23:08

标签: c# asp.net authentication login

我有一个用户可以登录的登录页面。当他们使用正确的详细信息登录时,会将其发送到主管理页面。如果他们无法登录,他们将停留在登录页面上。我想要做的是,如果是随机用户,当他们未登录时键入管理页面的URL,他们将重定向到登录页面。

我明白我必须在masterpage或webconfig中执行此操作!?!我有一个主管理页面和一些其他管理页面。

任何提示?

我尝试将其插入到我的webconfig中:

<authentication mode="Forms">
    <forms loginUrl="InnUtlogging.aspx" timeout="2880"/>
  </authentication>

这是我的“登录”按钮的代码(在登录页面上);

protected void Button1_Click(object sender, EventArgs e)
    {
        SqlConnection con = new SqlConnection(@"Data Source=(LocalDB)\MSSQLLocalDB;AttachDbFilename=|DataDirectory|\Database.mdf;Integrated Security=True");
        con.Open();
        SqlCommand cmd = new SqlCommand("select * FROM Ansatt WHERE epost='" + brukernavn.Text + "' and passord='" + passord.Text + "'");
        cmd.Connection = con;
        int OBJ = Convert.ToInt32(cmd.ExecuteScalar());

        if (OBJ > 0)

            {
            Session["name"] = brukernavn.Text;
            Response.Redirect("KunstnerAdmin.aspx");
        }
        else
            {
                melding.Text = "Feil brukernavn/passord";
            }
        if (brukernavn.Text == "")
        {
            melding.Text = "Du må fylle inn brukernavn";

        }
        if (passord.Text == "")
        {
            melding.Text = "Du må fylle inn passord";
        }
        }

“登录”页面上的代码适用于该页面,但实际上我想检查用户是否在主页面中登录。我可以在母版页中做些什么来激活表单身份验证吗?

2 个答案:

答案 0 :(得分:1)

您的代码缺少 FormsAuthentication 的大量内容。

首先,代码很容易出现 SQL Injection attack 。您想考虑使用 参数化查询

登录方法

protected void Button1_Click(object sender, EventArgs e)
{
    // After validation successful 
    bool rememberMe = false; // Make it false for now
    FormsAuthentication.RedirectFromLoginPage(brukernavn.Text, rememberMe);
}

的Global.asax.cs

您需要这样才能从cookie中检索用户名,并将其保存在IPrincipal对象中。

public class Global : HttpApplication
{
    private void Application_AuthenticateRequest(object sender, EventArgs e)
    {
        HttpCookie decryptedCookie =
            Context.Request.Cookies[FormsAuthentication.FormsCookieName];

        FormsAuthenticationTicket ticket =
            FormsAuthentication.Decrypt(decryptedCookie.Value);

        var identity = new GenericIdentity(ticket.Name);
        var principal = new GenericPrincipal(identity, null);

        HttpContext.Current.User = principal;
        Thread.CurrentPrincipal = HttpContext.Current.User;
    }
}

的web.config

<authentication mode="Forms">
   <forms loginUrl="~/InnUtlogging.aspx" />
</authentication>

用法

protected void Page_Load(object sender, EventArgs e)
{
    if (User.Identity.IsAuthenticated)
    {
        string username = User.Identity.Name;
    }
}

答案 1 :(得分:0)

以下是检查用户是否经过身份验证的方法。

HttpContext.Current.User.Identity.IsAuthenticated