【发布时间】:2013-01-03 03:50:40
【问题描述】:
我在项目中实施 SimpleMembership 时遇到问题。基本上,我找不到任何有关限制访问页面的信息。这是我到目前为止所做的:
- 我的登录页面名为 default.aspx。通过将其添加到 web.config,我已经能够将 SimpleMembership 配置为识别 default.aspx 作为我的登录页面:
<appSettings> <add key="loginUrl" value="default.aspx" /> </appSettings>
- 我的 default.aspx 中有一个 WebMethod,用于通过 WebSecurity.Login 验证用户凭据。我正在通过 jquery ajax 调用 WebMethod:
[WebMethod, ScriptMethod] public static bool Login(string userName, string password) { return SecurityManager.Instance.Login(userName: userName, password: password); }
- 在我的 jquery 代码的 ajax 成功处理程序中,我将用户重定向到另一个应受保护的页面 (home.aspx):
success: function (data, textStatus, jqXHR) { if (data.d) { window.location.href = "home.aspx"; } else { $("#invalidCredentialsBox").css("visibility", "visible"); } },
问题是,如果我尝试直接(从浏览器)访问 home.aspx,它实际上会加载。那么,我该怎么做才能让 SimpleMembership 限制对 home.aspx 的访问,直到用户成功登录?
我不得不做的,不知道这是否是正确的解决方案,它是在 app_code 文件夹中创建一个基类。该类继承自 System.Web.UI.Page,然后我将 home.aspx 更改为从该基类继承。在基类的构造函数中,我正在检查 WebSecurity.IsAuthenticated 属性,如果它是 false,那么我执行 Response.Redirect 到我的 error.aspx 页面:
namespace MyProject { public class BasePage : System.Web.UI.Page { public BasePage() { if (!SecurityManager.Instance.IsAuthenticated()) { HttpContext.Current.Response.Redirect("error.aspx"); } } } }
以这种方式,它可以工作,但我不认为这是实现它的正确方式。我发现的所有示例都使用 MVC,但我不是,实际上我对 MVC 几乎一无所知。能否请人提供一些想法或指出 SimpleMembership 与 .net Web 项目一起使用的相同文档/示例?
另外,还有哪些其他属性对 SimpleMembership 有效,我可以添加到 web.config 的 appSettings 部分?而且,如何设置 web.config 的身份验证部分以使用 SimpleMembership(我在 MVC 4 模板中看到,即使它使用 SimpleMembership,它仍然在 web.config 中设置表单身份验证部分)
谢谢。
【问题讨论】:
标签: asp.net web-applications security simplemembership