我正在构建一个小型MVC4网站,并使用SimpleMembershipProvider和SimpleRoleProvider。
我播种了我的数据库,以便[webpages_Roles]包含“管理员”和“用户” (类似于:link)。
帐户和用户个人资料模型的所有内容都与创建MVC4项目时一样。
现在我该如何制作,以便当有人注册时,他们会自动被置于“用户”角色?
答案 0 :(得分:7)
通常,您的所有用户注册逻辑都将驻留在您的帐户控制器中(如果您使用其中一个提供的Internet应用程序模板,情况就是如此)。因此,您需要在注册方法中添加代码,以便在成功创建帐户后将用户添加到用户角色。
这比试图观看某个事件更简单,更整洁,即使存在一个事件。您应该会发现,在一个设计良好的应用程序中,您无论如何都不会在任何一个地方拥有您的注册码。如果您使用Facebook等社交网络登录,这也可以让您处理OAuth场景。
e.g。这就是如何将它与Internet应用程序模板中的开箱即用的AccountController一起使用(用于本地站点注册)
[Authorize]
[InitializeSimpleMembership]
public class AccountController : Controller
{
... various actions ...
// GET: /Account/Register
[AllowAnonymous]
public ActionResult Register() {
return View();
}
// POST: /Account/Register
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public ActionResult Register(RegisterModel model) {
if (ModelState.IsValid) {
// Attempt to register the user
try {
WebSecurity.CreateUserAndAccount(model.UserName, model.Password);
// ----------------- NEW LINES HERE
Roles.AddUserToRoles(model.UserName, new[] { "Users" });
// ----------------- END NEW LINES
WebSecurity.Login(model.UserName, model.Password);
return RedirectToAction("Index", "Home");
}
catch (MembershipCreateUserException e) {
ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
... more actions ...
}