WebSecurity问题:初始化数据库连接

时间:2014-03-21 10:32:06

标签: asp.net-mvc security linq-to-sql

我在尝试建立身份验证系统时遇到了问题。我正在使用ASP.NET MVC 4和Linq to SQL Classes。

首先,有一个调用相关控制器的登录视图。这就是我正在按照他们的角色连接和重定向我的用户。

public class LoginController : Controller
{
    //
    // GET: /Login/
    T2A_DataClassesDataContext db;

    public LoginController()
    {
        db = new T2A_DataClassesDataContext();
    }
    public ActionResult Index()
    {
        return View();
    }

    [HttpPost]

    public ActionResult Index(LoginViewModel lvm)
    {
        if (ModelState.IsValid)
        {
            if (WebSecurity.Login(lvm.Username, lvm.Password, false))
            {
                var login = from u in db.Users where u.Username == lvm.Username select new User { Username = u.Username, Password = u.Password, IsAdmin = u.IsAdmin };

                User user = (User)login;

                String role = user.IsAdmin == true ? "Utilisateur" : "Administrateur";

                return RedirectToAction("Index", role);

            }

            else
            {
                ModelState.AddModelError("", "Identifiants erronés !");
            }
        }

        return View();
    }

}

当我编译解决方案时,输入正确的凭据并提交它,它失败了,这就是我得到的:

  

在调用“WebSecurity”类的任何其他方法之前,必须调用“WebSecurity.InitializeDatabaseConnection”方法。此调用应放在站点根目录中的_AppStart.cshtml文件中。

我知道这个消息很清楚,但我不知道如何继续这样做。有帮助吗?

1 个答案:

答案 0 :(得分:0)

WebSecurity. InitializeDatabaseConnection将通过创建必要的表来填充您的数据库以供成员资格提供程序使用。所以你必须在调用WebSecurity的任何其他功能之前调用它。在您的应用程序中,找到Application_Start(在Global.ascx.cs中)并在其中调用初始化代码。例如

if (!WebSecurity.Initialized)
    WebSecurity.InitializeDatabaseConnection("yourConnectionStringInConfigFile","UserProfile", "UserId", "UserName", autoCreateTables: true);

yourConnectionStringInConfigFile将是您在webconfig中的连接字符串。调用上面的代码后,WebSecurity将创建一个名为UserProfile的表以及其他必需的表。

祝你好运

相关问题