c# - 在 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());
}
我不确定这里发生了什么,需要一些帮助吗?
谢谢
解决方案
正如您之前的问题https://stackoverflow.com/a/58606263/5507748中所述,您没有登录您的用户。您只需在此处编写一个会话变量,因此您需要使用该行登录您的用户FormsAuthentication.SetAuthCookie(UserName.Text, true);
。然后您可以通过 访问用户名HttpContext.Current.User.Identity.Name.ToString()
。在这种情况下,不需要会话变量。
推荐阅读
- matlab - 绘制分段连续函数
- java - 计算数组列表中的重复项
- apache-spark - 从 SparkSession.read() 获取“org.apache.spark.sql.AnalysisException:路径不存在”
- kotlin - 通过某些条件初始化两个或多个 val 的 Kotlin 规范方法
- video - 更改 USB 摄像头的比特率
- react-native - android上的React Native,上传到Play商店时没有捆绑图像
- java - 如何 LocalDateTime 但使用服务器时间或互联网时间?
- jenkins - 如果存在合并冲突,Jenkins Pipeline Multibranch 不会运行后期步骤
- eclipse - 如何使用 Eclipse IDE 中的键盘快捷键导航到 Project Explorer 视图中当前文件的父文件夹?
- bash - 非法选项——?复印时