没有数据库的ASP MVC成员资格

时间:2013-04-20 18:35:59

标签: asp.net-mvc asp.net-membership database-connection membership-provider

是否可以在没有数据库的情况下使用WebSecurity或SimpleMembersshipProvider?这主要是因为我的Web服务器将使用“中央服务器”中的所有逻辑,而不是直接访问数据库。

1 个答案:

答案 0 :(得分:2)

不确定。请参阅如何实施自定义成员资格提供程序:http://www.codeproject.com/Articles/165159/Custom-Membership-Providers

基本上你需要做的是继承MembershipProvider类并实现ValidateUser等基本方法,并在web.config中注册新的提供程序。您可以使用任何您喜欢的数据存储。

另一种选择是手动处理用户身份验证,并使用FormsAuthentication.Authenticate()发送带有用户请求的身份验证cookie。如果您希望我可以向您发送代码示例,此方法也适用于[授权]过滤器。

编辑:

public class CustomAuthorizeFilter : AuthorizeAttribute
{
    protected override bool AuthorizeCore(HttpContextBase httpContext)
    {
        var authenCookie = httpContext.Request.Cookies.Get(FormsAuthentication.FormsCookieName);
        if (authenCookie == null) return false;

        return true;
    }

    protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
    {
        filterContext.Result = new RedirectResult("/");
    }
}

登录方式:

var ticket = new FormsAuthenticationTicket(1, // version 
                                   token, // user name
                                   DateTime.Now, // create time
                                   DateTime.Now.AddDays(1), // expire time
                                   model.RememberMe, // persistent
                                   ""); // user data, such as roles
var strEncryptedTicket = FormsAuthentication.Encrypt(ticket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, strEncryptedTicket);
Response.Cookies.Add(cookie);
相关问题