首页 > 解决方案 > 在 web.config 文件中使用授权时被重定向回登录屏幕

问题描述

我在尝试解决我遇到的这个问题时遇到了一些麻烦。我有一个名为“Admin”的文件夹,在该文件夹中我有两个 Web 表单和web.config文件。我已经创建了用户并将他们添加到他们的角色中。

web.config我的文件中:

<authorization>
  <allow roles="Administrators" />
  <deny users="*" />
</authorization>

当我使用管理员(担任管理员角色)登录时,我被重定向到索引页面(这一切都有效)。但是,当从那里浏览到管理页面时,我会被重定向到登录屏幕,但我已经Administrators在我的web.config文件中添加了角色?

这是我的 login.aspx.cs

protected void btnLoginButton_Click(object sender, EventArgs e)
    {
        if (Membership.ValidateUser(UserName.Text, Password.Text))
        {
            Session["UserName"] = this.UserName.Text.Trim();
            Response.Redirect("~/Index.aspx");
        }
        // If we reach here, the user's credentials were invalid
        InvalidCredentialsMessage.Visible = true;
    }

然后在我的根web.config文件中:

<system.web>
<authentication mode="Forms">
</authentication>
<membership defaultProvider="SqlProvider">
  <providers>
    <!--Add a customized SqlMembershipProvider -->
    <add name="SqlProvider"
    type="System.Web.Security.SqlMembershipProvider"
    connectionStringName="DefaultConnection"
    enablePasswordRetrieval="false"
    enablePasswordReset="true"
    requiresQuestionAndAnswer="false"
    applicationName="SecurityTutorials"
    requiresUniqueEmail="true"
    passwordFormat="Hashed"
    maxInvalidPasswordAttempts="5"
    minRequiredPasswordLength="7"
    minRequiredNonalphanumericCharacters="1"
    passwordAttemptWindow="10"
    passwordStrengthRegularExpression=""/>
  </providers>
</membership>
<roleManager enabled="true" 
             defaultProvider="AspNetSqlRoleProvider" 
             cacheRolesInCookie="true"
             createPersistentCookie="false"
             cookieProtection="All">
  <providers>
    <clear />
    <add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" applicationName="/" connectionStringName="DefaultConnection" />
    <add applicationName="/" name="AspNetWindowsTokenRoleProvider" type="System.Web.Security.WindowsTokenRoleProvider" />
  </providers>

</roleManager>

然后在 Admin 文件夹的两个 Web 表单中,我有以下内容:

if (!Page.IsPostBack)
        {
            if (Session["UserName"] != null)
            {
                this.WelcomeBackMessage.Text = string.Format("Welcome {0}", Session["UserName"].ToString());
            }

我不确定这里发生了什么,需要一些帮助吗?

谢谢

标签: c#asp.net

解决方案


正如您之前的问题https://stackoverflow.com/a/58606263/5507748中所述,您没有登录您的用户。您只需在此处编写一个会话变量,因此您需要使用该行登录您的用户FormsAuthentication.SetAuthCookie(UserName.Text, true);。然后您可以通过 访问用户名HttpContext.Current.User.Identity.Name.ToString()。在这种情况下,不需要会话变量。


推荐阅读