我在我的项目中实施 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 属性,如果它为假,那么我对我的 error.aspx 页面执行 Response.Redirect:
namespace MyProject { public class BasePage : System.Web.UI.Page { public BasePage() { if (!SecurityManager.Instance.IsAuthenticated()) { HttpContext.Current.Response.Redirect("error.aspx"); } } } }
以这种方式,它可以工作,但我觉得这不是实现它的正确方法。我发现的所有示例都使用 MVC,但我不是,实际上我对 MVC 几乎一无所知。请有人给出一些想法或指出我与.net web 项目一起使用 SimpleMembership 的相同文档/示例吗?
此外,还有哪些其他属性对 SimpleMembership 有效,我可以添加到 web.config 的 appSettings 部分?并且,如何设置 web.config 的身份验证部分以使用 SimpleMembership(我在 MVC 4 模板中看到,即使它使用 SimpleMembership,它仍然在 web.config 中设置表单身份验证部分)
谢谢。